NYOJ——28 大数阶乘

大数阶乘

时间限制: 3000 ms  |  内存限制: 65535 KB
难度: 3
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
50
样例输出
30414093201713378043612608166064768844377641568960512000000000000
来源

经典题目


5000的阶乘不超过16400位


#include<stdio.h>
#include<string.h>

int main()
{
    int a[16400];
    int n,i,s,j,c;
    while(~scanf("%d",&n))
    {
        memset(a,0,sizeof(a));
        a[0] = 1;
        c = 0;
        for(i = 2; i <= n; i ++)
            for(j = 0; j < 16400; j ++)
            {
                s = a[j] * i + c;
                a[j] = s % 10;
                c = s / 10;
            }
        for(i = 16399;i >= 0; i --)
            if(a[i])
                break;
        for(j = i; j >= 0; j --)
            printf("%d",a[j]);
        printf("\n");
    }
}


你可能感兴趣的:(算法,ACM,简单题,nyoj)