백준 c++/(1-1)백준 c++ 알고리즘 기초

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

현구구 2022. 7. 6. 14:58

3 팩토리얼은 6이기 때문에 0이 없으므로 -> 0

10팩토리얼은 뒤에서부터 0의 개수가 2개이므로 -> 2 가 출력되어야 한다.

#include <iostream>
using namespace std;

int main() {
	int N;
	cin >> N;//입력받을 정수
	int result = 0;
	for (int i = 1; i <= N; i++) {
		int check = i;
		int count = 0;
		while (check % 5 == 0) {//check가 5로 나누어떨어질 경우
			check /= 5;//check를 5로 나누고 count 1증가
			count++;//N이 5제곱승 이상일 경우 count계속 증가(while문)
		}
		if (count != 0) {//while문에서 다 더한 count를 result에 넣음
			result += count;
		}
	}
	cout << result;
}

맨 마지막에 나오는 0의 개수는 5의 개수로 판별할 수 있다.

맨 마지막에 나오는 0의 개수는 곧 10의 개수인데 10은 2x5이다

이때 1부터 N까지의 수를 소인수 분해 했을 때 2의 개수>5의 개수이므로 5의 개수만을 구해서 정답을 유도할 수 있다.