• 大数阶乘


    http://acm.nyist.net/JudgeOnline/problem.php?pid=28

    大数阶乘

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

    根据题目输入数据的规模可以用数组保存数据
    即实现大数乘法
    将数组每个元素作为一位,这样最大的进位是((9*5000-1)/10+(9*5000-1))/10
    如果是char型数组会出现溢出错误,所以用int型数组存储;防止进位时溢出;
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int n,t;
        int a[100000];
        while(scanf("%d",&n)==1&&n>=0)
        {
            int set,ge;
            memset(a,-1,100000);
            a[0]=1;
            for(t=1;t<n+1;t++)
            {
                set=0;ge=0;
                while(1)
                {
                    if(a[set]==-1&&ge==0)break;
                    if(a[set]==-1)a[set]=0;
                    a[set]*=t;
                    a[set]+=ge;
                    ge=0;
                    if(a[set]>9)
                    {
                        ge=a[set]/10;
                        a[set]%=10;//进位
                    }
                    set++;
                }
                
            }
            while(set--)
            {
                printf("%d",a[set]);
            }
            printf("\n");
        }
        return 0;
    }


  • 相关阅读:
    最短路径之spfa
    最短路径之Bellman-Ford——解决负权边
    最短路径之Floyd-Warshall算法
    图上最短路径问题
    它们其实都是图(二分图)
    记忆化结果再利用 进一步探讨递推关系
    leetcode 376. 摆动序列 java
    leetcode 368. 最大整除子集 java
    leetcode 96. 不同的二叉搜索树 java
    leetcode 454. 四数相加 II java
  • 原文地址:https://www.cnblogs.com/pojdd/p/7676533.html
Copyright © 2020-2023  润新知