大数阶乘

#include<iostream>
using namespace std;
int main(){
	int a[40000];			//100的阶乘也不会超过40000位,结果的每一位都放到数组的每一位中
	int n,i,j,temp,r=0,len=1;		//初始化参数,n:要计算阶乘的数,r为进位,len为中间结果的长度
	while(cin>>n){		
		len=1,r=0,a[0]=1;			//每次初始化
		for(i =2; i<=n; i++){		//循环乘到n	中间结果就会变成最终的结果
			for(j=0; j<len; j++){	
				a[j]*=i;			//将中间结果的每一位都乘以循环要乘的数
			}
			for(j=0; j<len; j++){	//进行修正每个数组内的数字,将每个数组内的数字变成一位数字和进位	
				temp=r+a[j];		//
				r = temp/10;
				a[j] = temp%10;
			}
			while(r){				//将最终的进位进行循环修正,直到将进位化成每一位
				a[len]=r%10;		
				r= r/10;
				len++;
			}
		}	
		for(i=len-1;i>=0;i--){		//最终结果已经出来,len指示的是结果的长度,进行输出
			cout<<a[i];
		}
		cout<<endl;
	}
	return 0;
}


你可能感兴趣的:(大数阶乘)