【大数/高精度整数】14:求10000以内n的阶乘

时间:2022-12-03 03:36:33

14:求10000以内n的阶乘

总时间限制: 
5000ms
内存限制: 
655360kB
描述

求10000以内n的阶乘。

输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
样例输入
100
样例输出
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
来源

JP06


这道题..........直接套原来的模板不行....原因找了半天是因为数组开小了,,,,,坑啊

#include <stdio.h>
#include <string.h>
struct bigInteger{
	//int digit [1000] ;  这个1000大小过不了
	int digit [10000] ;
	int size;
	void init(){
		for (int i = 0; i < 1000; i ++) 
			digit [i] = 0;
		size = 0;
	}
	void set(int x){
		init();
		do{
			digit[size++]=x%10000;
			x/=10000;
		}while(x!=0);
	}
	void output(){
		for(int i=size-1;i>=0;i--){
			if(i!=size-1){
				printf("%04d",digit[i]);
			}else{
				printf("%d",digit[i]);
			}
		}
		printf("\n");
	}
	bigInteger operator * (int x)const{
		//乘法
		bigInteger ret;
		ret.init();
		int c=0;
		for(int i=0;i<size;i++){
			int tmp=x*digit[i]+c;
			c=tmp/10000;
			tmp%=10000;
			ret.digit[ret.size++]=tmp;
		}
		if(c!=0){
			ret.digit[ret.size++]=c;
		}
		return ret;
	} 
}a;
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		a.init();
		a.set(1);
		for(int i=1;i<=n;i++){
			a=a*i;
		}
		a.output();
	}
	return 0;
}