天天看點

1134高精度乘階

題目描述

求一個非負整數 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;
}