大数的阶乘

数的阶乘大家都会求,但是牵涉到大数,比如说50的阶乘,100的阶乘,5000的阶乘,10000的阶乘。。。等等,就会发现long long int 远远不够用。因此联想到小学生的乘法问题,我们可以用数组来模拟乘法运算、进位的过程。下面上一道题:

1105: 求N的阶乘

时间限制: 3 Sec 内存限制: 65536 MB
提交: 40 解决: 20
[提交][状态][讨论版]

题目描述

我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

输入

输入文件第一行有一个整数n(1≤n≤50),以下n行每行有个整数k(0

输出

输出文件有n行,各包含一个结果。

样例输入

2
5
50

样例输出

120
30414093201713378043612608166064768844377641568960512000000000000

参考代码:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int N,n,i,j,k;
    cin>>N;
    while(N--)
    {
        cin>>n;
        int p=1,s=0,a[100009]={0};//定义数组并初始化为0
        a[1]=1;
        for(j=1;j<=n;j++)
        {
            int t=0;
            for(i=1;i<=p;i++)
            {
                s=a[i]*j+t;
                a[i]=s%10;
                t=s/10;//循环相乘并进位
            }
            while(t)
            {
                a[++p]=t%10;
                t/=10;//继续进位
            }
        }
        for(i=p;i>0;i--)
            cout<<a[i];//逐项输出
        cout<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40907279/article/details/79168066