본문 바로가기

Algorithm

C++(씨쁠쁠)(cplusplus)-백준(baekjoon)(BaekJoon)코딩 1676번 : 팩토리얼 0의 개수답

반응형

2와 5의 지수만 세면 되는 간단한 문제!


예를 들어 5! = 1 X 2 X 3 X 4 X 5, 10이 곱해질 때마다 0의 개수가 1개 추가되므로 10의 약수인 2와 5가 한번씩 곱해진다면 같은 의미(0의 개수 1추가)를 가지게 됩니다. 팩토리얼 안에 곱해지는 숫자들을 각각 2와 5로 약분하여 지수를 구해 모두 합쳤고 2 X 5를 한 세트로 2와 5의 지수를 하나씩 빼가며 답을 구했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using namespace std;
int main() {
    //2와 5의 지수만 세면 된다.
    int two=0;
    int five=0;
    int cnt=0;
    int n;
    cin >> n;
    for (int i = 0; i <= n; i++)
    {
        int tmp = i;
        while (1//5로 계속 나누어 떨어지면 루프
        {
            if (tmp >= 5 && tmp % 5 == 0)
            {
                tmp /= 5;
                five++;
            }
            else
                break;
        }
 
        while (1)
        {
            if (tmp >= 2 && tmp % 2 == 0//2로 나눠지고 2보다 크다면
            {
                tmp /= 2;
                two++;
            }
            else
                break;
        }
    }
    
    while (1//2의 지수, 5의 지수 모두 0이 아닌 동안 루프를 돈다.
    {
        if (two == 0 || five == 0)
            break;
        else
        {
            cnt++;
            two--;
            five--;
        }
    }
    cout << cnt << '\n';
}
cs