题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2674
题目大意:
给你个n,
输出n!%2009的值
思路:
题目给的N(0 <= N<=10^9)明显是不能暴力解决的。
然后再试试看输出前n<100个的值可以发现,到n=40之后全是0了。那么的话我们只需要递归记录前41个的值(包括n=0)就行了,其它大于40的一律输出0即可。
ac代码:
#include<stdio.h>
#include<iostream>
using namespace std;
int factorial(int x,int aim){
if(x==0){
return aim;
}
return factorial(x-1,(aim*x)%2009);
}
int main(){
int n;
int a[45];
// scanf("%d",&n);
for(int i = 0;i <= 40;i++){
a[i] = factorial(i,1);
}
while(~scanf("%d",&n)){
if(n>40){
cout<<0<<endl;
}else{
cout<<a[n]<<endl;
}
}
return 0;
}