微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐