본문 바로가기
백준

[백준 1675] 팩토리얼 0의 개수, C++

by 황인태(intaehwang) 2020. 1. 9.
반응형

https://www.acmicpc.net/problem/1676

 

1676번: 팩토리얼 0의 개수

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.

www.acmicpc.net

 본 문제는 N! 에서 뒤어서부터 0이 아닐 때까지 0의 개수를 구하는 것이다. 팩토리얼에서 N이 13만 돼도 엄청 큰 숫자다 그렇기 때문에 직접 팩토리얼을 구한 다음 0의 개수를 셀 수 없다. 따라서, 뒤에 0이 나오기 위한 조건으로 구해야 한다. 어떤 수에 10이 곱해졌을 때, 뒷자리에 0이 추가된다. 그렇기 때문에 10이 곱해지는 개수를 구해야 하는데 10은 2 * 5이고 N! 에서 2의 개수보다 5의 개수가 무조건 적게 나오기 때문에 5 ~ N까지 반복하면서 X에 5가 몇 번 곱해져 있는지 확인하면 된다.

  1. [5, N] 범위의 임의의 수 X를 5로 나누었을 때 나머지가 0일 경우
  2. X를 5로 나누었을 때 나머지가 0이 아닐 때 까지 반복
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <cstdio>
 
using namespace std;
 
int main() {
    int n, cnt = 0;
    scanf("%d"&n);
    for (int i = 5; i <= n; i++) {
        int k = i;
        while (true) {
            if (k % 5 == 0) {
                cnt += 1;
                k /= 5;
            }
            else break;
        }
    }
    printf("%d", cnt);
    return 0;
}
cs
반응형

'백준' 카테고리의 다른 글

[백준] 17298 - 오큰수, C++  (0) 2020.01.09
[백준] 2004 - 조합 0의 개수, C++  (0) 2020.01.09
[백준 6588] 골드바흐의 추측, C++  (0) 2020.01.09
[백준 1929] 소수 구하기, C++  (0) 2020.01.09
[백준 1037] 약수, C++  (0) 2020.01.08
Buy me a coffeeBuy me a coffee

댓글