백준 1676 팩토리얼 0의 개수 C++

2023. 9. 14. 13:30알고리즘문제 풀이/백준

문제

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

입력

첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500)

출력

첫째 줄에 구한 0의 개수를 출력한다.

 

풀이

N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하기 위해 

N! = a * 10^b 에서 b의 최댓값을 구해야 한다.

10^b = (2 * 5)^b이다.

1 * 2 * 3 * 4 * .... * N = N! 에서

2의 배수의 개수가 5의 배수의 개수보다 더 많이 곱해져 있으므로 

N! 이 가지고 있는 5의 개수를 구해야한다.

N! 이 5로 최대 몇번 나누어 떨어지는지 구하면 처음 0이 아닌 숫자가 나올 때까지의 0의 개수를 구할 수 있다.

#include <iostream>

using namespace std;

int main()
{
    int n, k, c;
    c = 0;
    cin >> n;
    
    for(int i = 5; i <= n; i = i + 5){
        c += 1;
        k = i / 5;
        while(k % 5 == 0) {
            c += 1;
            k = k / 5;
        }
    }
    cout << c;
    
    return 0;
}

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

백준 1759 암호 만들기 C++  (0) 2023.09.14
백준 1712 손익분기점 Python  (1) 2023.09.14
백준 1629 곱셈 Python  (0) 2023.09.14
백준 1550 16진수 C++  (0) 2023.09.14
백준 1546 평균 C++  (0) 2023.09.14