Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2010, 19:17   #1
Radiy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 10
По умолчанию Факториал

Код:
procedure TForm1.FaktClick(Sender: TObject);
var
k,i:longint;

begin
k:=1;
for i:=2 to StrToInt(Edit1.Text) do
k:=k*i;
Edit1.Text:=IntToStr(k);

end;
Он считает факториал только до 19, про попытке посчитать 20 факториал он выдаёт: "-2102132736".

Сразу скажу, стоит у меня Lazarus.
Radiy вне форума Ответить с цитированием
Старый 01.07.2010, 19:29   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

А что вас не устраивает? Факториал знаете ли самая быстрорастущая функция, поэтому факториал 20 уже выбивается за разрядную сетку longint'а. Для того, чтобы считать факториал больших чисел используйте длинную арифметику.
mMAg вне форума Ответить с цитированием
Старый 01.07.2010, 23:12   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

mMAg, +1

немного можно увеличить диапазон, использовав Int64 вместо longint

а дальше (если нужно получать факториал для бОльших чисел) — только используя т.н. "длинную" арифметику.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2010, 05:45   #4
Radiy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 10
По умолчанию

А в чём заключается эта длинная арифметика?

Я использовал "int64" и смог посчитать 20!, но уже 21! он считает не правильно

Последний раз редактировалось Radiy; 02.07.2010 в 05:48.
Radiy вне форума Ответить с цитированием
Старый 02.07.2010, 08:24   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А в чём заключается эта длинная арифметика?
Вы не поверите — в том, что можно проводить вычисления с любой (заданной программистом) длиной чисел - хоть с 10000-значными...
вот только все операции (начиная со сложения/вычитания) прийдётся реализовывать "вручную".

нажмите на форуме на кнопочку поиск и наберите там Длинная арифметика

или, результаты поиска на Гугле
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2010, 08:26   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Я реализовывал через строки - вот действительно длина числа не ограничена, правда есть и обратная сторона медали - резкое падение скорости вычислений для больших разрядов.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Факториал seredkin Microsoft Office Excel 4 03.06.2010 15:44
Факториал. dimka660i Помощь студентам 11 10.10.2009 23:28
Факториал в C++ slog Помощь студентам 2 03.12.2008 07:56
Факториал Killbrum Софт 14 13.08.2008 00:34