처음 생각한 방법은 5마다 0이 하나씩 늘어난다는 가정이었다.
4! = 24, 5! = 120
9! = 362880, 10! = 3628800
14! = 87178291200 15! = 1307674368000
근데 100을 넘어서부터는 하나씩 더 추가되나보다.. 틀렸다고 나왔다.
두번째로 생각한 방법은 뒤의 0만 세는 조건이므로 그 앞의 숫자를 저장해놓고 그 숫자로
만 계산을 하는 방법을 생각했다. 결과는 정답!
1) 마지막 숫자를 Number에 저장해놓고 팩토리얼을 진행한다.
2) 10으로 나눈 나머지가 0이라면(뒤에 0이 있다면) 계속 제거하고 아니라면
3) 마지막 숫자만 남긴 뒤(10으로 나머지 처리한 후) 반복문 탈출.
long long Factorial(long long num) { int Count = 0; int Number = 1; for (long long i = 2; i <= num; i++) { Number *= i; while(true) { if ((Number % 10) == 0) { Number /= 10; Count++; } else { Number %= 10; break; } } } return Count; }
<소스 코드>
*Source of the problem = https://www.acmicpc.net/problem/1676
*문제 출처 : BAEKJOON ONLINE JUDGE
댓글
댓글 쓰기