注:本程序只适用于N<=10000的阶乘运算,N=10000时已经跑得相当慢,超过了1s,只是推荐一下自己的方法
10000!的结果大约有36000位,需要开一个至少为36000的数组
下面用实例来模拟一下我的方法:
输入N=6
0 1 2 3 4 5 6 7 8 9 10 11 12(数组指针)
i=1
1 0 0 0 0 0 0 0 0 0 0 0 0
i=2
2 0 0 0 0 0 0 0 0 0 0 0 0
i=3
6 0 0 0 0 0 0 0 0 0 0 0 0
i=4
24 0 0 0 0 0 0 0 0 0 0 0 0
4 2 0 0 0 0 0 0 0 0 0 0 0
i=5
20 10 0 0 0 0 0 0 0 0 0 0 0
0 12 0 0 0 0 0 0 0 0 0 0 0
0 2 1 0 0 0 0 0 0 0 0 0 0
i=6
0 12 6 0 0 0 0 0 0 0 0 0 0
0 2 7 0 0 0 0 0 0 0 0 0 0
输出:720
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int n;
int a[50000];
while(cin>>n)
{
memset(a,0,sizeof(a));
a[0]=1;
for(int i=1; i<=n; i++)
{
for(int j=0; j<i*4; j++)//将所有数字都乘i
a[j]*=i;
for(int j=0; j<i*4; j++)//进位
if(a[j]>9)
{
a[j+1]+=a[j]/10;
a[j]%=10;
}
}
int t;
for(int i=n*4; i>=0; i--)//忽略前导0
{
if(a[i]!=0)
{
t=i;
break;
}
}
for(int i=t; i>=0; i--)
cout<<a[i];
cout<<endl;
}
return 0;
}