题意:计算n!最后一位不为0的数
解题思路:1*2*3*......*n,每次乘完一个数后,把末尾0去掉,然后模上一个数,这样算出来的数肯定是最后一位不为0的数。。
注意这里模的数不能太小,同时也不能太大,太小可能会影响乘积的效果,譬如可能出现0的情况被之前的模运算给抹掉了,太大就直接溢出了。。。
参考了别人的,模取100000
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int main()
{
while(scanf("%d",&n)!=EOF){
m = 1;
for(int i = 1; i <= n; i++){
m = m * i;
while(m % 10 == 0){
m = m / 10;
}
m %= 100000;
}
m %= 10;
printf("%5d -> %d\n",n,m);
}
return 0;
}