POJ_1604_Just the Facts(阶乘末尾非0位)

来源:互联网 发布:自助域名绑定如何实现 编辑:程序博客网 时间:2024/06/05 06:45

题型:数论


题意:求n!的末尾非0位。


分析:

      直接求是不可能了,因为数太大表示不了,但是求末尾非0位,并不需要求出具体的数值,而且末尾的0也是不必要的,所以循环累乘的过程中每次都将末尾的0去掉,并且模上一个数使其保持在一个相对合适的长度,我取的是10^5,不能再小了,在小就WA了。。。


代码:

#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#define MOD 100000using 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;}


0 0