본문 바로가기
문제 풀이/백준(BOJ)

[C++] 백준 1676번 : 팩토리얼 0의 개수

by 희조당 2021. 7. 19.
728x90

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

 

1676번: 팩토리얼 0의 개수

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

www.acmicpc.net


 문제 풀이

처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 만드는 것이다.

1부터 차근차근하나 곱하다 보면 규칙성을 알 수 있다.

바로 10의 값이 곱해질 때마다 1의 자리에 0이 추가된다.

고로 이 문제는 2와 5의 갯수를 따지는 문제이다.

하지만 2의 개수는 5의 개수보다 절대적으로 많을 수밖에 없다.

문제를 쉽게 만들기 위해서 5의 개수만 따져주면 된다. 

 느낀 점

규칙성을 찾긴 했는데 구현하는 데에 있어서 살짝 해맨 것 같다. 오랫동안 코딩을 쉬었더니 많이 감이 죽었다.

 코드

#include <iostream>

using namespace std;

int n, cnt = 0;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);

	cin >> n;
	for (int i = 2; i <= n;i++) {
		int tmp = i;
		while (1) {
			if (tmp % 5 == 0) {
				cnt++;
				tmp /= 5;
			}
			else break;
		}
	}
	cout << cnt;
}

댓글