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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2013, 12:21   #1
Metaphora
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 2
Вопрос Факториал большого числа

В поиске нужного не нашёл, возможно, сможет кто-то подсказать.Язык программирования - Pascal. Необходимо вычислить сумму факториалов всех нечётных чисел от 1 до 55. Сам код программы я написал, но даже скомпилировать не могу, т.к. происходит "арифметическое переполнение" (я так понял, что стандартным типам данных не хватает памяти, чтобы хранить полученные значения факториалов и сумм).

Может, кто-то знает, как это сделать? Задание предполагает знание самых азов паскаля, т.е. нужно что-то простое. На типы Qword и Int64 компилятор ругается, что не знает таких, в Real происходит "переполнение плавающей запятой". HELP!
Metaphora вне форума Ответить с цитированием
Старый 03.11.2013, 12:35   #2
dragodar
Пользователь
 
Регистрация: 30.09.2012
Сообщений: 51
По умолчанию

попробуй doubleint или как он там назывался. а до каких чисел примерно идёт подсчёт?
dragodar вне форума Ответить с цитированием
Старый 03.11.2013, 12:37   #3
dragodar
Пользователь
 
Регистрация: 30.09.2012
Сообщений: 51
По умолчанию

если числа целые то подойдёт longint
если с запятыми то лучше extended
dragodar вне форума Ответить с цитированием
Старый 03.11.2013, 12:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
попробуй doubleint
Extended вообщето. Не думаю что поможет. Тут нужна длинная арифметика.
Цитата:
Задание предполагает знание самых азов паскаля
Значит придется тебе искать математические методы оперирования с большими числами.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2013, 12:42   #5
dragodar
Пользователь
 
Регистрация: 30.09.2012
Сообщений: 51
По умолчанию

ну да я прост в какомто языке использовал doubleint
а так вот сайт посмотри там http://pascal.guti.ru/types.html
dragodar вне форума Ответить с цитированием
Старый 03.11.2013, 12:44   #6
gaw4
Форумчанин
 
Регистрация: 31.05.2010
Сообщений: 407
По умолчанию

как вариант -представлять числа как строки
icq 584 308 611
gaw4 вне форума Ответить с цитированием
Старый 03.11.2013, 13:05   #7
Metaphora
Новичок
Джуниор
 
Регистрация: 03.11.2013
Сообщений: 2
По умолчанию

Цитата:
Сообщение от dragodar Посмотреть сообщение
если числа целые то подойдёт longint
если с запятыми то лучше extended

использовал double, включил режим 8087. Спасибо, проблема решена, тему можно закрывать
Metaphora вне форума Ответить с цитированием
Старый 03.11.2013, 13:56   #8
vadimych
Форумчанин
 
Регистрация: 16.01.2011
Сообщений: 325
По умолчанию

Вот вычисление факториала. 3000! с таким размером буфера берёт.
Код:
program Project2;

var
l, i, n, x, y, m: integer; {n - вводимое число, x - перенос, y - для промежуточного вычисления}
k: array[1..30001] of integer;

begin
Writeln('input number');
Readln(n);

k[30001]:=1;
for i:=1 to 30000 do {всё заполняем нулями, кроме последней цифры}
k[i]:=0;

for l:=1 to n do 
begin

x:=0;

for i:=30001 downto 1 do
begin

y:=k[i]*l+x; {умножаем последнюю цифру на число (от 1 до n)}
k[i]:=y mod 10; {в самый младший разряд записываем остаток}
x:=y div 10; {а это "в уме", т.е. перенос в следующий разряд}

end;
end;


n:=0;
while k[n]=0 do
n:=n+1;

x:=30001-n;

l:=30001;
while k[l]=0 do
l:=l-1;

if x>10 then
begin
write(k[n],',');
n:=n+1;
l:=l-1;
end;

for i:=n to l+1 do
 
begin

write(k[i]);

end;

if x>10 then 
begin
n:=30002-n;
writeln('e+',n);
end;
asm
xor ax,ax
int 16h
end;

end.

Последний раз редактировалось vadimych; 03.11.2013 в 15:54.
vadimych вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить факториал числа п. Факториал числа представить в виде целочисленного массива десятичных цифр. M1kefly Общие вопросы C/C++ 1 07.07.2013 21:00
Факториал числа Kazik Помощь студентам 1 07.05.2012 15:58
Факториал числа (C++) evox Помощь студентам 3 22.12.2011 21:47
Факториал большого числа Аруми Помощь студентам 2 08.11.2011 14:48
Си наити факториал большого числа и вывести в виде массива Владимир #include Помощь студентам 2 28.10.2008 13:13