题型:数论
题意:求n!的末尾非0位。
分析:
直接求是不可能了,因为数太大表示不了,但是求末尾非0位,并不需要求出具体的数值,而且末尾的0也是不必要的,所以循环累乘的过程中每次都将末尾的0去掉,并且模上一个数使其保持在一个相对合适的长度,我取的是10^5,不能再小了,在小就WA了。。。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define MOD 100000
using namespace std;
int n;
int main(){
while(~scanf("%d",&n)){
if(n==0){
puts(" 0 -> 1");
continue;
}
int mul = 1;
for(int i=1;i<=n;i++){
mul *= i;
while(mul%10==0){
mul/=10;
}
mul%=MOD;
}
printf("%5d -> %d\n",n,mul%10);
}
return 0;
}