题意:求N!(N<=10000)的最后一位非0数。
10000以内5^5 = 3125最多可以影响后5位。所以直接保存后五位就行。
1 #include<iostream> 2 #include<cstdio> 3 #define MOD 100000 4 using namespace std; 5 const int maxn=10005; 6 int a[maxn]; 7 8 int main() 9 { 10 a[0]=1; 11 for(int i=1;i<=10000;i++) 12 { 13 a[i]=a[i-1]*i; 14 while(a[i]%10==0) 15 a[i]/=10; 16 a[i]%=MOD; 17 } 18 int n; 19 while(cin>>n){ 20 printf("%5d -> %d ",n,a[n]%10); 21 } 22 return 0; 23 }