1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
| sqrt |
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: 0 |
Требуется найти факториалы всех чисел от 1 до 100. Стандартный цикл не канает, т.к. в longint не влезет факториал ста... Есть подозрение что это можно реализовать рекурсией, но как? Что делать???
|
![]() ![]() |
| xds |
Сообщение
#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.
|
sqrt факториалы больших чисел 19.12.2004 5:45
volvo sqrt
Рекурсия вызывает переполнение при n = 14
То… 19.12.2004 6:08
sqrt Пасибо, попробую умножение длинных чисел. 19.12.2004 6:22
Digitalator
А каким образом рекурсия вообще может спасти от п… 19.12.2004 21:35
sqrt Что-то у меня ничего не получается... может кто по… 21.12.2004 12:06
sqrt Люди! Что я неправильно делаю? Подскажите, пли… 21.12.2004 16:49
volvo sqrt
Держи правильную программу (она пишет фактор… 21.12.2004 17:05
sqrt volvo
Спасибо большое! 21.12.2004 17:09![]() ![]() |
|
Текстовая версия | 10.01.2026 9:11 |