https://www.acmicpc.net/problem/1676
N!의 뒤의 0의 개수는 인수로 10을 몇 개로 가지고 있는지를 구하면 된다.
10 = 2 * 5이므로 인수로 2와 5를 몇 개를 가지고 있는지를 구하고 더 작은 수를 출력하면된다.
하지만 2보다는 항상 5가 많기 때문에 인수로 5를 몇 개 가지고 있는지만 구하면 된다.
이는 N을 5, 5^2, 5^3, 5^4.....으로 나눈 값을 모두 더하면 된다.
각 수로 나눈 때마다 5가 몇 개 있는지 5^2이 몇 개 있는지 알 수 있다.
이는 N >= 5^n까지 구하면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
int main() {
int N;
scanf("%d", &N);
int sum = 0;
for (int i = 5; i <= N; i *= 5)
{
sum += N / i;
}
printf("%d", sum);
return 0;
}
|
cs |
'Problem Solving' 카테고리의 다른 글
[BOJ 1331] 나이트투어 (0) | 2019.03.10 |
---|---|
[BOJ 1037] 약수 (0) | 2019.03.10 |
[BOJ 2869] 달팽이는 올라가고 싶다 (0) | 2019.03.03 |
[BOJ 2004] 조합 0의 개수 (0) | 2019.03.03 |
[BOJ 2903] 중앙 이동 알고리즘 (0) | 2019.03.03 |