Ваш код работает только для очень маленьких значений N
: до 9
. Для немного больших значений вам нужно добавить ключевое слово else
перед оператором break
, и вы получите правильный результат еще для нескольких случаев.
Для больших значений вы должны вычислить степень 5, которая делит факториал. Вы можете сделать это постепенно, суммируя степень 5, которая делит каждое отдельное число до N
.
включительно.
#include <stdio.h>
int main() {
int N, count;
if (scanf("%d", &N) != 1)
return 1;
/* only consider factors that are multiples of 5 */
count = 0;
for (int i = 5; i <= N; i += 5) {
for (int j = i; j % 5 == 0; j /= 5)
count++;
}
printf("%d\n", count);
return 0;
}
Еще более простое и быстрое решение заключается в следующем: вычислить число, кратное 5
, меньшее или равное N
, добавить число, кратное 5*5
и т. Д.
Вот код:
#include <stdio.h>
int main() {
int N, count;
if (scanf("%d", &N) != 1)
return 1;
count = 0;
for (int i = N; (i /= 5) > 0;) {
count += i;
}
printf("%d\n", count);
return 0;
}