大数阶乘
时间限制:
3000 ms | 内存限制:65535 KB
难度:
3
-
描述
- 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
-
输入
- 输入一个整数m(0<m<=5000) 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入
-
50
样例输出
-
30414093201713378043612608166064768844377641568960512000000000000
思路:
模拟人工计算的方法计算:
a b
* c
------------------
d+(remainder) e d+b*c的进位;
如果乘积为一位数,则a[j]中,余数为0,如果成绩超过前一个数的位数是,j的for循环处理完之后remainder(余数)不为0,会进入while循环,会把当前的a数组扩容一位,存下余数,并且当前数字的位数+1
由于存进去的都输余数,最后选择逆序数出,#include <iostream>
using namespace std;int a[2005];
int main()
{
int m,remainder,digit,temp;
cin>>m;
a[0]=1;
remainder=0; //余数初始化为0
for(int i=2;i<=m;i++) // 要处理的位数
{
for(int j=0;j<digit;j++)
{
temp=a[j]*i+remainder;
a[j]=temp%10;
remainder=temp/10;
}
while(remainder)
{
a[digit]=remainder%10;
remainder/=10;
digit++;
}
}
for(int i=digit-1;i>=0;i--)
cout<<a[i];
cout<<endl;
return 0;
}