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;
}
posted @ 2014-08-29 15:24  forever97  阅读(128)  评论(0编辑  收藏  举报