求n的阶乘的最后一个非0数,因为是10000以内的。
先把每个阶乘存到一个数组内。
#include<cstdio>
#include<cstring>
const int MAXN=1e4+10;
int store[MAXN];
int main(){
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
memset(store,0,sizeof(store));
store[0]=1;
store[1]=1;
for(int i=2;i<=10000;i++){
store[i] = store[i-1]*i;
while(store[i]%10==0) store[i]/=10; //将阶乘最后的0去掉
store[i] %= 100000; //求模,避免溢出,因只需要最后一位
}
int a;
while(~scanf("%d",&a)){
if(store[a]>10) store[a]%=10; //得到最后一位
printf("%5d -> %d\n",a,store[a]);
}
return 0;
}