杭电OJ-1042

#include 
#include 
#define max 100000
int main()
{ //大数阶乘,多位一存 
	int a[100005],n;
	long long jinwei,weishu,num;
	while(scanf("%d",&n)!=EOF)
	{
		memset(a,0,sizeof(a));
		a[0]=1;weishu=1;
		
		for(int i=1;i<=n;i++)
		{
			//part 1
			jinwei=0; 
			for(long long j=0;j<weishu;j++)
			{
				num=a[j]*i+jinwei;
				jinwei=num/max;
				a[j]=num%max;			
			}
			
			//part 2
			if(jinwei>0){
				a[weishu]=jinwei;weishu++;
			}
		
		}
		
		//part 3
		printf("%d",a[weishu-1]);
		for(long long i=weishu-1-1;i>=0;i--)
		printf("%05d",a[i]);
		putchar('\n'); 		
	}	
	return 0;
}

你可能感兴趣的:(杭电oj练习)