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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.01.2016, 18:42   #1
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию Количество нулей в конце факториала

Задание - нужно найти кол-во нулей в конце факториала числа.
Код:
var
fi,fo:text;
n,x,a,i:longint;
y:longint;
begin
Assign(fi,'books.in');
Assign(fo,'books.out');
Reset(fi);
Rewrite(fo);
Read(fi,n);
y:=0;
a:=0;
for i:=1 to n do
begin
a:=i;
while a mod 5=0 do begin
inc(y);
a:=a div 5;
end;
end;
Write(fo,y);
Close(fo);
end.
Программа работает, считает, но при числах под миллиард зацикливается, не понимаю почему.
Объясните, пожалуйста.
dimon_snake вне форума Ответить с цитированием
Старый 02.01.2016, 19:30   #2
Viktor_Ptica
Пользователь
 
Регистрация: 23.12.2015
Сообщений: 22
По умолчанию

Данным кодом Вы ищите не "кол-во нулей в конце факториала числа", а количество чисел, кратных 5 (причем ОЧЕНЬ многие повторно). При входном n=1562548580 результат Вашего кода выдал 390 637 141, что мне кажется не правильным. Хотя верным будет ответ 312 509 716. Попробуйте ввести n=25 и на выходе получите 6 вместо 5. Что то вы напутали в алгоритме точно. Ну или в задаче.

Для решения Вашей задачи рекомендую входное число преобразовать в текст и обработать уже текст, перебирая символы с конца строки в начало, пока Символ не станет неравен 0
Если задача кажется легкой - то решать её придется очень долго.

Последний раз редактировалось Stilet; 02.01.2016 в 21:25.
Viktor_Ptica вне форума Ответить с цитированием
Старый 02.01.2016, 20:19   #3
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Число во входном файла может быть от 1 до 1000000000.
dimon_snake вне форума Ответить с цитированием
Старый 02.01.2016, 20:59   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Ну дак у тебя 10^9. Да и цикл внутри. Конечно тл.. Тут нужно просто делить на все степени 5 м суммировать частное
Poma][a вне форума Ответить с цитированием
Старый 02.01.2016, 21:33   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Все правильно ты считаешь, проверь для 100 - должно быть 24 нуля. Насчет зависания Poma][a правильно говорит - очень долго считать для миллиарда нужно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.01.2016, 21:36   #6
Viktor_Ptica
Пользователь
 
Регистрация: 23.12.2015
Сообщений: 22
Печаль

Цитата:
Сообщение от Аватар Посмотреть сообщение
Все правильно ты считаешь, проверь для 100 - должно быть 24 нуля. Насчет зависания Poma][a правильно говорит - очень долго считать для миллиарда нужно
если не сложно, поясните. в чем суть вопроса? число нулей в результате операции Факториал(10000000000)? вероятно не правильно понял вопрос....
Если задача кажется легкой - то решать её придется очень долго.

Последний раз редактировалось Viktor_Ptica; 02.01.2016 в 21:38.
Viktor_Ptica вне форума Ответить с цитированием
Старый 02.01.2016, 21:38   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Задается n. Нужно посчитать сикока 0 в конце n!. По крайней мере ТС это считает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.01.2016, 21:40   #8
dimon_snake
Форумчанин
 
Регистрация: 05.11.2015
Сообщений: 167
По умолчанию

Вот как можно уменьшить время выполнения программы? Программа не зацикливается, но считает довольно долго.
dimon_snake вне форума Ответить с цитированием
Старый 02.01.2016, 21:45   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для этого алгоритма пожалуй ни как. Других, более быстрых не знаю. Просто не знаю
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.01.2016, 22:17   #10
Viktor_Ptica
Пользователь
 
Регистрация: 23.12.2015
Сообщений: 22
Печаль

Цитата:
Сообщение от Viktor_Ptica Посмотреть сообщение
Данным кодом Вы ищите не "кол-во нулей в конце факториала числа", а количество чисел, кратных 5 (причем ОЧЕНЬ многие повторно). При входном n=1562548580 результат Вашего кода выдал 390 637 141, что мне кажется не правильным. Хотя верным будет ответ 312 509 716. Попробуйте ввести n=25 и на выходе получите 6 вместо 5. Что то вы напутали в алгоритме точно. Ну или в задаче.

Для решения Вашей задачи рекомендую входное число преобразовать в текст и обработать уже текст, перебирая символы с конца строки в начало, пока Символ не станет неравен 0
признаюсь, сильно ступил. прогуглил и осознал(
Если задача кажется легкой - то решать её придется очень долго.
Viktor_Ptica вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерные массивы. Определить номер столбца, содержащего максимальное количество нулей. Exdns Паскаль, Turbo Pascal, PascalABC.NET 1 21.11.2013 09:40
Упорядочить строки в StringGrid по характеристике: наибольшее количество идущих подряд нулей (Delphi) Bizikov Помощь студентам 0 26.05.2011 18:54
Матрица целых чисел А(3,4). Найти количество нулей и произведение элементов не равных нулю (Basic) AnnKarpinskaya Помощь студентам 1 16.05.2011 23:35
посчитать количество нулей в массиве melie91 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.02.2011 13:49
Посчитать количество нулей, находящихся на главной диагонали (массив) Sin3v_ Паскаль, Turbo Pascal, PascalABC.NET 6 03.10.2010 16:22