https://www.acmicpc.net/problem/1676
1676번: 팩토리얼 0의 개수
N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제

풀이
팩토리얼 계산을 하게되면 적은숫자면 모르지만 큰수를 입력할 경우 오버플로우 오류가 생긴다. (숫자가 너무 커서)
문제를 풀어서 생각해보면, 0이 아닌 숫자가 나올 때 까지 0의 개수를 구하는것이다.
처음 0이 아닌 숫자가 나오는 경우는 10의 거듭제곱 밖에 없다. 결국 10은 2와 5로 소인수 분해를 할 수가 있다.
숫자는 2부터 입력받은 수까지 반복하며 소인수 분해한 2와 5중 더 작은 개수를 출력하면 된다.
Code ( C++ )
#include <iostream>
using namespace std;
int num2 = 0;
int num5 = 0;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int temp;
//2와 5의 개수
for (int i = 2; i <= n; i++)
{
temp = i;
// 2
while (temp % 2 == 0)
{
num2++;
temp /= 2;
}
// 5
while (temp % 5 == 0)
{
num5++;
temp /= 5;
}
}
cout << min(num2, num5);
}
'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글
[백준 / BOJ] C++ 1780 종이의 개수 (0) | 2023.03.04 |
---|---|
[백준 / BOJ] C++ 1764 듣보잡 (0) | 2023.03.04 |
[백준 / BOJ] C++ 1463 1로 만들기 (0) | 2023.01.10 |
[백준 / BOJ] C++ 2798 블랙잭 (0) | 2022.12.15 |
[백준 / BOJ] C++ 1107 리모컨 (0) | 2022.12.15 |