杭电1042

/*********************************
 *    日期:2011-3-2
 *    作者:SJF
 *    题号:杭电1042
 *    题目:N!
 *    结果:AC
 *    总结:高精度算法
**********************************/
#include <stdio.h>
#define MAX 100000//传统6存1算法,转换成100000进制。
int main()
{
    int n;
    while (scanf("%d",&n)!=EOF)
    {
        int s[10000]={0};
        int i,j,k=0,carry;//k用来控制100000进制的位数,carry进位
        if(n==0)//0!规定为1
        {
            printf("1\n");
            continue;
        }
        s[0]=1;
        for(i=1;i<=n;i++)
        {
            carry=0;
            for(j=0;j<=k;j++)
            {
                s[j]=s[j]*i+carry;
                carry=s[j]/MAX;
                s[j]%=MAX;
            }
            if(carry)
            {
                k++;
                s[k]=carry;
            }
        }
        printf("%u",s[k]);
        for(i=k-1;i>=0;i--)
        {
            j=10;
            printf("%05d",s[i]);
        }
        printf("\n");
    }
    return 0;
}

 

 

 

 

 

 

 

 

 

 

posted @ 2011-10-28 13:40  爱生活,爱编程  阅读(284)  评论(0编辑  收藏  举报