题目描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输
出它?
输入
输入文件第一行有一个整数n(1≤n≤50),以下n行每行有个整数k(0<k<5000)。
输出
输出文件有n行,各包含一个结果。
样例输入
2
5
50
样例输出
120
30414093201713378043612608166064768844377641568960512000000000000
大数的计算,实际上就是你自己写一份运算过程,计算机太傻了算不了,只能靠聪明的我们去拯救了。
注意:加法,乘法就是运用过10进1的思想。掌握这点关键,基本上就能写出来一半啦,
#include <iostream>
#include<cstring>
#include<stdio.h>
using namespace std;
int main()
{
int n,i,j,wei=0,a[10000],m;
cin>>m;
while(m--)
{
cin>>n;
memset(a,0,sizeof(a));//定义数组内的数均为零
a[0]=1;
for(i=1; i<=n; i++)//for循环控制从1乘到n
{
for(j=0; j<=wei; j++)//控制i乘以数组内每一位数值
{
a[j]=i*a[j];
}
for(j=0; j<=wei; j++)//数组内大于10要向前进1跟
{
if(a[j]>=10)
{
a[j+1]+=a[j]/10;
a[j]=a[j]%10;
wei++;
}
}
}
for(i=wei; i>=0; i--)//防止在输出N的阶乘时,首位为0
{
if(a[i]==0)
continue;
else
{
wei=i;
break;
}
}
for(i=wei; i>=0; i--)
cout<<a[i];
cout<<endl;
}
return 0;
}