poj 1604

2019-04-14 16:04发布

题意:计算n!最后一位不为0的数
解题思路:1*2*3*......*n,每次乘完一个数后,把末尾0去掉,然后模上一个数,这样算出来的数肯定是最后一位不为0的数。。 注意这里模的数不能太小,同时也不能太大,太小可能会影响乘积的效果,譬如可能出现0的情况被之前的模运算给抹掉了,太大就直接溢出了。。。 参考了别人的,模取100000
#include #include #include 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,m); } return 0; }