计算0~10000之间数的阶乘结果。
由于一个数阶乘的结果位数非常高,所以采用数组对每次乘积的结果进行记录。
每一次循环把乘数乘到每一位然后对该位上的数取模运算,carry进位数取/10的运算。
输入:
150
输出:
57133839564458545904789328652610540031895535786011264182548375833179829124845398393126574488675311145377107878746854204162666250198684504466355949195922066574942592095735778929325357290444962472405416790722118445437122269675520000000000000000000000000000000000000
C++代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 50000;
int n;
int main()
{
while(cin>>n)
{
int num[N]={0};
num[0]=1;
int i,j,carry=0;
for(i=2;i<=n;i++)
{
carry=0;
for(j=0;j<N;j++)
{
int temp=i*num[j]+carry;
num[j]=temp%10; //第j位上取mod运算
carry=temp/10; //进位取/10运算
}
}
for(i=N-1;i>=0;i--) if(num[i]) break;
for(j=i;j>=0;j--)
printf("%d",num[j]);
printf("\n");
}
return 0;
}