hdu1042 N!

/*
N!
Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 67077    Accepted Submission(s): 19228


Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!


Input
One N in one line, process to the end of file.


Output
For each N, output N! in one line.


Sample Input

1
2
3



Sample Output

1
2
6



Author
JGShining(极光炫影)


Recommend
We have carefully selected several similar problems for you:  1715 1063 1753 1316 1013
*/
#include <iostream>
#include<stdio.h>
using namespace std;
const int Len = 40000;
int *a =new int[Len];
int main()
{
    int i,j,n,pos,over;
    //double test;
    while(scanf("%d",&n)!=EOF)
    {
        //test=1;
        pos=0;
        a[0]=1;
        for(i=1; i<=n; i++)
        {
            over=0;
            for(j=0; j<=pos; j++)
            {
                a[j]*=i;
                a[j]+=over;
                over=a[j]/100000;//each five bit calculate
                a[j]%=100000;
            }
            if(over!=0)
            {
                pos+=1;
                a[pos]=over;
            }
        }
        printf("%d",a[pos]);//high-five-bit output-length follow its length
        for(i=pos-1; i>=0; i--)
        {
            printf("%05d",a[i]);//others output-length must be five
        }
        printf("
");
        //for(i=1;i<=n;i++)
        //test*=i;
        //printf("%f
",test);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/heqinghui/p/4848804.html