Koder / 박성훈
article thumbnail

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

 

2553번: 마지막 팩토리얼 수

첫째 줄에 N이 주어진다. N은 20,000보다 작거나 같은 자연수 이다.

www.acmicpc.net

#include <stdio.h>

int f(int k, int t){
	if(t == 1) return k;
	k = k*t;
	while(k%10 == 0) k/=10;
	k = k%100000;
	return f(k, t-1);
}

int main(){
	int n;
	scanf("%d", &n);
	printf("%d", f(1, n)%10);
}

재귀함수를 이용해서 풀어줬다.

k는 계산중인 팩토리얼 수이고, t는 곱해야 할 수이다.

t가 1이라면 더 곱해줄 필요가 없으므로 k를 결과값으로 반환해주고,

아닐경우에는 k에 t를 곱해준 다음,

첫번째 자리에 생기는 0을 전부 제거해준다.

그리고 자칫 k를 너무 많이 곱해 정수범위를 넘어가는 일이 생기지 않도록

100000으로 나눈 나머지만을 취해준다.

( 100000 * 20000 는 2,000,000,000으로 int범위를 넘지 않는다. )

마지막으로 10으로 나눈 나머지를 통해 첫번째 자리만 따로 출력해주면 AC.

반응형