HDU 1042 N!

题解:高精度乘法压位。

#include <cstdio>

#include <cstring>

const int mod=10000;

int l,n,a[1000000];

int main(){

    while(~scanf("%d",&n)){

        memset(a,0,sizeof a);

        a[1]=1; l=1; 

        for(int i=2,m=0;i<=n;i++){

            for(int j=1;j<=l;j++){

                (a[j]*=i)+=m;

                m=a[j]/mod;

                a[j]%=mod;

            }while(m>0){a[++l]=m%mod;m/=mod;}

        }printf("%d",a[l]);

        for(int i=l-1;i;i--)printf("%04d",a[i]);puts("");

    }return 0;

}

你可能感兴趣的:(HDU)