大数运算(一) —— N的阶乘
注:本程序只适用于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;}