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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 26.02.2011, 20:55   #1
Тапочек
Новичок
Джуниор
 
Регистрация: 26.02.2011
Сообщений: 4
Вопрос факториал числа (Pascal)

спасибо =)

Последний раз редактировалось Тапочек; 26.02.2011 в 21:23.
Тапочек вне форума
Старый 26.02.2011, 21:01   #2
Besidnuk
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 17
По умолчанию

Код:
var i,j,n,a,sum:LongInt;
begin
readln(n);
sum:=0;
for i:=1 to n
 do begin
  a:=1;
  for j:=1 to i
   do a:=a*j;
  sum:=sum+a;
 end;
writeln(sum);
readln;
end.
Besidnuk вне форума
Старый 26.02.2011, 21:15   #3
Intermediate
 
Регистрация: 26.02.2011
Сообщений: 7
По умолчанию

Это ужасный алгоритм! Ты высчитываешь факториал числа в каждой итерации цикла снова и снова. Эта задачка решается за линейное время. Вот посмотри: топик

Факториал нужно считать только 1 раз. На каждой итерации ты домножаешь факториал, увеличивая значение аргумента на 1 и добавляешь новое слагаемое. Не нужно каждый раз высчитывать его заново. Нужно запоминать старое значение (i - 1)!. На новой итерации умножаешь его на i, получая i! И т. д.
Intermediate вне форума
Старый 26.02.2011, 21:21   #4
Тапочек
Новичок
Джуниор
 
Регистрация: 26.02.2011
Сообщений: 4
По умолчанию

Besidnuk, спасибо!
Тапочек вне форума
Старый 26.02.2011, 21:22   #5
Besidnuk
Пользователь
 
Регистрация: 07.11.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Intermediate Посмотреть сообщение
Это ужасный алгоритм! Ты высчитываешь факториал числа в каждой итерации цикла снова и снова. Эта задачка решается за линейное время. Вот посмотри: топик

Факториал нужно считать только 1 раз. На каждой итерации ты домножаешь факториал, увеличивая значение аргумента на 1 и добавляешь новое слагаемое. Не нужно каждый раз высчитывать его заново. Нужно запоминать старое значение (i - 1)!. На новой итерации умножаешь его на i, получая i! И т. д.

согласен!
но здесь йтак число N большого значения не сможет приобрести, потому я не старался написать быструю программу)
Besidnuk вне форума
Старый 26.02.2011, 21:28   #6
Intermediate
 
Регистрация: 26.02.2011
Сообщений: 7
По умолчанию

Ну знаешь, может ты и сумму натуральных чисел от 1 до 100000 будешь в цикле высчитывать? Тогда я в уме посчитаю результат быстрее твоей программы.
Intermediate вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Факториал числа ProgramerBeatz Паскаль, Turbo Pascal, PascalABC.NET 3 11.05.2011 19:05
Факториал числа в Delphi Prisian Общие вопросы Delphi 16 24.01.2008 13:23
Факториал числа (циклы) Sargon Общие вопросы C/C++ 2 14.01.2008 02:25
Факториал от дробного числа RIO Помощь студентам 11 26.12.2007 18:36