![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
sqrt |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Требуется найти факториалы всех чисел от 1 до 100. Стандартный цикл не канает, т.к. в longint не влезет факториал ста... Есть подозрение что это можно реализовать рекурсией, но как? Что делать???
|
![]() ![]() |
xds |
![]()
Сообщение
#2
|
![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: ![]() ![]() ![]() |
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.
|
![]() ![]() |
![]() |
Текстовая версия | 10.09.2025 3:38 |