이번 문제는 팩토리얼을 계산했을 때, 뒤에서부터 연속된 0의 개수를 세는 것입니다.
팩토리얼은 1부터 n까지의 곱을 계산한 것인데요. 20 팩토리얼만 해도 2,432,902,008,176,640,000 값이 나와서 정수 계산으로는 힘듭니다. 물론 64비트 정수형을 사용하면 조금 더 계산할 수는 있습니다. 그런데 문제는 500까지의 숫자 범위를 가지고 있습니다. 500 팩토리얼은

우리가 계산하고자 하는 계산은 뒤에 연속된 0의 개수입니다. 실제로 뒤에 연속된 0의 개수는 10의 멱승과 관련되죠. 예를 들어서 10 팩토리얼은 3,628,800 으로 뒤의 연속된 0의 개수는 2개입니다. 그 이야기는 10 팩토리얼은 100의 배수가 되죠. 100의 배수가 된다는 것은
이것을 이용하면, n 팩토리얼이 10의 몇승의 배수가 되는지 계산할 수 있습니다.
의 식으로 계산할 수 있습니다.
이것을 이용해서 프로그램한 소스입니다. 소스는 참고용으로 봐주세요.
//----------------------------------------------------------------------------------------
// baekjoon #1676 - Zero counting of factorial
// - by Aubrey Choi
// - created at 2019-06-07
//----------------------------------------------------------------------------------------
#include <stdio.h>
int main()
{
int n, c = 0;
scanf("%d", &n);
for(;n;c+=(n/=5));
printf("%d\n", c);
}
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #1697 숨바꼭질(너비 우선 탐색) (0) | 2022.09.30 |
---|---|
[Python] 백준 #1684 같은 나머지(정수론) (2) | 2022.09.29 |
백준 #1671 상어의 저녁식사(최대 유량) (0) | 2022.09.27 |
[C/C++] 백준 #1669 멍멍이 쓰다듬기(수학) (0) | 2022.09.25 |
[C/C++] 백준 #1655 가운데를 말해요(힙) (2) | 2022.09.22 |
댓글