Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/40: Рейтинг темы: голосов - 40, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 26.04.2015
Сообщений: 56
1

Найти количество нулей на конце n!

05.02.2016, 12:31. Показов 8230. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, я готовлюсь к олимпиаде и мне дана задача: Найти количество нулей на конце n! (n факториал). n<=10^9. Но вот проблема, мое решение слишком долго выполняется для больших чисел и поэтому превышает лимит по времени выполнения. Можно ли как то его изменить, чтобы оно выполнялось быстрее? Вот мое решение:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var b,n,i:longint;
s:real;
begin
read(n);
b:=0; s:=0;
for i:=1 to n do
begin
if (i mod 5 = 0) then
begin
b:=i;
while b mod 5 = 0 do
begin
b:=b div 5;
s:=s+1;
end;
end;
end;
write(s:20:0);
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2016, 12:31
Ответы с готовыми решениями:

Найти количество нулей в конце записи факториала N
Найти количество нулей в конце записи факториала числа n

Найти количество нулей в конце записи факториала числа
Найти количество нулей в конце записи факториала числа n. Подскажет, кто алгоритм? Или хотя бы в...

Посчитать количество нулей-хвостов (те, которые в самом конце числа)
Считываем число с файла, ищем его факториал и с этого факториала надо найти кол-во нулей в конце....

Найти факториал и определить число нулей в конце числа
Есть программка, вводишь число, программа находит факториал, надо найти кол-во нулей на конце...

12
1 / 1 / 1
Регистрация: 26.04.2015
Сообщений: 56
05.02.2016, 13:03  [ТС] 2
Не спорю. Я и готовлюсь. Так как же мне все таки нужно переделать мое решение?
0
Объявлятель переменных
1220 / 406 / 320
Регистрация: 24.09.2011
Сообщений: 1,265
05.02.2016, 13:05 3
Лучший ответ Сообщение было отмечено GreenFoxer как решение

Решение

Не по теме:

Мистика. Где моё сообщение? Я же уже писал ответ.


Pascal
1
2
3
4
5
6
7
S := 0;
Readln(N);
while N > 5 do
begin
  S := S + N div 5;
  N := N div 5;
end;
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
05.02.2016, 13:07 4
На одно деление короче:
Pascal
1
2
3
4
5
6
7
S := 0;
Readln(N);
while N > 5 do
begin
  N := N div 5;
  S := S + N;
end;
3
1 / 1 / 1
Регистрация: 26.04.2015
Сообщений: 56
05.02.2016, 13:09  [ТС] 5
Спасибо, помог)
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
05.02.2016, 13:11 6
Pascal
1
n div 5+n div 25
0
Объявлятель переменных
1220 / 406 / 320
Регистрация: 24.09.2011
Сообщений: 1,265
05.02.2016, 13:16 7
Цитата Сообщение от Constantin Cat Посмотреть сообщение
n div 5+n div 25
Мон шер... И сколько нулей в конце 1000! насчитает такая формула?
Цитата Сообщение от bormant Посмотреть сообщение
На одно деление короче:
Это да.
0
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
05.02.2016, 16:45 8
Цитата Сообщение от SpBerkut Посмотреть сообщение
Мон шер... И сколько нулей в конце 1000! насчитает такая формула?
249

Цитата Сообщение от GreenFoxer Посмотреть сообщение
Можно ли как то его изменить, чтобы оно выполнялось быстрее?
Можно, исправленный вариант:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  a,b,c:longint;
begin
  write('N:=');
  readln(a);
  b:=5;
  c:=0;
  while a>b do
    begin
      c:=c + a div b;
      b:=b * 5;
    end;
  write('C:=',c);
end.
на 10000! совпало.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.02.2016, 18:23 9
Цитата Сообщение от SpBerkut Посмотреть сообщение
И сколько нулей в конце 1000! насчитает такая формула?
Цитата Сообщение от Constantin Cat Посмотреть сообщение
249
А нифига
Миниатюры
Найти количество нулей на конце n!  
0
1 / 1 / 1
Регистрация: 26.04.2015
Сообщений: 56
05.02.2016, 21:18  [ТС] 10
Почему то прошло не все тесты...
Цитата Сообщение от Constantin Cat Посмотреть сообщение
Можно, исправленный вариант:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  a,b,c:longint;
begin
  write('N:=');
  readln(a);
  b:=5;
  c:=0;
  while a>b do
    begin
      c:=c + a div b;
      b:=b * 5;
    end;
  write('C:=',c);
end.
Миниатюры
Найти количество нулей на конце n!  
0
2509 / 1130 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
06.02.2016, 00:01 11
Цитата Сообщение от GreenFoxer Посмотреть сообщение
Почему то прошло не все тесты...
я, конечно, чего-то не понимаю, но я считал, что 5! = 120
(один ноль в конце есть).
а код выдаёт ноль нулей...

может быть, нужно нестрогое равенство:
Pascal
1
2
3
4
5
6
7
8
9
10
begin
  S := 0;
  Readln(N);
  while N >= 5 do
  begin
    N := N div 5;
    S := S + N;
  end;
  WriteLn(s)
end.
0
1 / 1 / 1
Регистрация: 26.04.2015
Сообщений: 56
06.02.2016, 00:09  [ТС] 12
Цитата Сообщение от Sergio Leone Посмотреть сообщение
может быть, нужно нестрогое равенство
ДА!!! СПАСИБО!!!
0
Sergio Leone
06.02.2016, 00:11     Найти количество нулей на конце n!
  #13

Не по теме:

Цитата Сообщение от GreenFoxer Посмотреть сообщение
ДА!!! СПАСИБО!!!
да мне, собственно, не за что! Идею (алгоритм) придумали выше (респект SpBerkut!)
я так - "мимо проходил" :)

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2016, 00:11

Десятичное число кратно 16. Какое минимальное количество нулей будет в конце этого числа после перевода его в двоичную систему счисления
Объясните решение

Сколько нулей в 1000! на конце?
Сколько нулей в 1000! на конце? Ответьте, не печатая значение 1000!

Найти количество нулей в числе
составить программу,которая считывает вводимые с клавиатуры числа и считает количество нулей в них....

Найти количество нулей в массивах
нужно найти количество нулей в масивах (a,b,c,d) сначала я сделал програму для масивов а и b -- у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru