IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> факториалы больших чисел
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Требуется найти факториалы всех чисел от 1 до 100. Стандартный цикл не канает, т.к. в longint не влезет факториал ста... Есть подозрение что это можно реализовать рекурсией, но как? Что делать???
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


shr offtop,1
В детстве баловался:

Код
program FuckToReal;

const DataSize = 16384;
     ResultSize = 60000;

type PResult = ^TResult;
    TResult = array[0..0] of Char;

var Data: array[0..DataSize - 1] of Word;
   Result: PResult;
   Digits, N: Integer;
   SymbolIndex, i: Word;

begin
 GetMem(Result, ResultSize);
 Write('N>');
 Readln(N);
 FillChar(Data, SizeOf(Data), 0);
 Data[0] := 1;
 Digits := 1;
 Write('Calculating... ');

 { Calulating of factorial by long binary multiplication }
 asm
   push bp
   mov bp,N
 @@NextPass:
   push ds
   pop es
   lea si,Data
   mov di,si
   cld
   xor bx,bx
   mov cx,Digits
 @@NextDigit:
   lodsw
   mul bp
   add ax,bx
   adc dx,0
   stosw
   mov bx,dx
   loop @@NextDigit
   or bx,bx
   jz @@Exit
   inc Digits
   mov cx,1
   jmp @@NextDigit
 @@Exit:
   dec bp
   cmp bp,1
   ja @@NextPass
   pop bp
 end;
 Writeln('Done');
 Write('Converting...  ');

 { Building a decimal representation of long binary number }
 SymbolIndex := ResultSize;
 asm
   push bp
   mov bp,Digits
   dec bp
   shl bp,1
   lea bp,Data[bp]
   les di,Result
   add di,ResultSize-1
   mov bx,10
   std
 @@NextSymbol:
   xor dx,dx
   mov si,bp
   cmp [si],bx
   jae @@NextDigit
   sub bp,2
 @@NextDigit:
   lodsw
   div bx
   mov [si+2],ax
   cmp si,offset Data
   jae @@NextDigit
   mov al,dl
   add al,'0'
   stosb
   dec SymbolIndex
   cmp bp,offset Data
   jae @@NextSymbol
   pop bp
 end;
 Writeln('Done');
 for i := SymbolIndex to ResultSize - 1 do Write(Result^[i]);
 Writeln;
 FreeMem(Result, ResultSize);
end.


Считала 10000! (с точностью до едениц) на Pentium 100 MHz за 37 секунд.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 3:38
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name