数的阶乘大家都会求,但是牵涉到大数,比如说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;
}