題目描述
求一個非負整數 N 的階乘的精确值(N 的大小保證 N 的階乘不超過 3000 位)。
輸入描述
有多組測試資料,每組測試資料包含一行非負整數 N。
輸出描述
對于每組測試資料,輸出一行答案。
樣例輸入
3
10
50
樣例輸出
6
3628800
30414093201713378043612608166064768844377641568960512000000000000
#include<iostream>
#include<string.h>
using namespace std;
string s;
int n,l;
int a[3000];
string jiecheng(){
memset(a,0,sizeof(a));//需要string.h頭檔案
string ans;
a[1]=1;
l=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=l;j++){
a[j]*=i;
}
for(int j=1;j<=l;j++){
if(a[j]>10){
a[j+1]+=a[j]/10;
a[j]%=10;
}
}
while(a[l+1]){
l++;
a[l+1]+=a[l]/10;
a[l]%=10;
}
}
//另一個大的for循環
for(;l>=1;l--){
ans+=a[l]+'0';
}
return ans;
}
int main()
{
while(cin>>n){
s=jiecheng();
cout<<s<<endl;
}
return 0;
}