알고리즘/문제 풀이

1676번: 팩토리얼 0의 개수

Themion 2021. 12. 9. 10:23

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

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net

N!은 1부터 N까지의 곱이고, N!의 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지의 0의 개수는 N!의 10의 차수, 즉 N!의 2의 차수와 5의 차수 중 더 작은 값이므로 1부터 N까지 모든 수에 대해 2의 차수와 5의 차수를 계산해 그 최솟값을 출력하면 된다.

#include <cstdio>

int main() {
    // N: 팩토리얼에 곱할 각 수, n: N의 오염을 막기 위한 변수
    // n2, n5: 각 n의 2의 차수와 5의 차수의 합
    int N, n, n2 = 0, n5 = 0;
    // 팩토리얼을 구할 수를 입력받은 뒤
    scanf("%d", &N);

    // 팩토리얼에 곱할 각 수에 대해
    while(n = N--) {
        // 해당 수가 2 혹은 5의 배수라면 그 차수만큼 n2혹은 n5에 값을 더해준다
        while (!(n % 2)) { n2++; n /= 2; }
        while (!(n % 5)) { n5++; n /= 5; }
    }

    // n2와 n5 중 더 작은 값을 출력한다
    printf("%d\n", n2 < n5 ? n2 : n5);

    return 0;
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

1712번: 손익분기점  (0) 2021.12.09
1697번: 숨바꼭질  (0) 2021.12.09
1654번: 랜선 자르기  (0) 2021.12.09
1647번: 도시 분할 계획  (0) 2021.12.09
1644번: 소수의 연속합  (0) 2021.12.09