nyoj28大数阶乘

思路就是模拟手算,一步一步乘上去。每乘进去一个i,就从a0开始更新每个点。用c保存进位。每次更新就是用当前这个点的值乘新进入的i再加上一个点留下来的进位C。开始没想出来原因就是觉得每次乘都要从头开始更新节点太麻烦会超时,但事实证明我想多了= =


#include
int main()
{
    int a[17000] = {0},s,c,i,j,m;
    scanf("%d",&m);
    a[0] = 1;
    for(i = 2 ; i <= m ; i++)
    {
        c = 0;
        for(j = 0 ; j < 17000 ; j++)
        {
            s = a[j] * i + c;
            a[j] = s % 10 ;
            c = s / 10;
        }
    }
    for(i = 17000 - 1 ; i >= 0 ; i--)
        if(a[i])
        break;
    for(; i >= 0 ; i--)
        printf("%d",a[i]);
    printf("\n");
    return 0;
}

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...