2020. 6. 19. 18:23
728x90

1. 숫자의 끝에 0이 붙는다는 것은 그만큼 10을 곱했다는 소리다.

2. 10 = 2×5. 소인수의 경우 2보다 5가 차지하는 비율이 적다. 따라서 소인수 5의 개수만 구할 수 있으면 된다.

3. 팩토리얼을 구성하는 소인수 5의 개수는 n/5를 반복해서 합산하는 것으로 구할 수 있다.

    • 첫 번째 n/5는 5^1가 있는 수
    • 두 번째 n/5는 5^2가 있는 수
    • 세 번째 n/5는 5^3가 있는 수
    • 예시) 75!의 경우 75/5 = 15이고, 15 / 5 = 3이므로 0의 개수는 18개가 된다.

4. ×5의 개수를 구하는 코드는 아래와 같다.

void FactorialTrailingZeroes(int n)
{
	int ret = 0;
	while(n > 0)
	{
		ret += n / 5;
		n /= 5;
	}
	return ret;
}


※ 재귀함수로 구현한다면 한 줄로도 구현할 수 있다.

void FactorialTrailingZeroes(int n)
{
	return n < 5 ? 0 : trailingZeroes (n / 5) + n / 5;
}


728x90

'공부 > 문제풀기' 카테고리의 다른 글

백준 15740 - A+B - 9  (0) 2019.10.11
백준 10953 - A+B - 6  (0) 2019.10.11
프로젝트 오일러 문제 19  (0) 2019.10.08
백준 2558 - A+B - 2  (0) 2019.09.24
백준 2156 - 포도주 시식  (0) 2019.08.26
Posted by 아야카