南邮 OJ 1590 阶乘

阶乘

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 1634            测试通过 : 201 

比赛描述

    阶乘(factorial)是基斯顿.卡曼于1808年发明的运算符号,是指指从1乘以2乘以3乘以4一直乘到所要求的数。例如,所要求的数是4,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。 例如所要求的数是6,则阶乘式是1×2×3×……×6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是x,x就是n的阶乘。   

在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!

以下列出1至5的阶乘:

1!=1,

2!=2,

3!=6,

4!=24,

5!=120 
另外,数学家定义,0!=1,所以0!=1!

通常我们所说的阶乘是定义在自然数范围里的,小数没有阶乘,像0.5!,0.65!,0.777!都是错误的。

      现给定正整数n,请你编程求n!。



输入

单组样例,输入一个正整数n,0≤n≤5000。

输出

输出n的阶乘n!。

样例输入

4

样例输出

24

题目来源

NUPT




#include<stdio.h>
int a[50000];
int main(){
	int n,i,j,maxIndex,carry;
	a[0] = 1;
	maxIndex = 0;
	scanf("%d",&n);
	for(i=2; i<=n; i++){
		carry = 0;
		for(j=0; j<=maxIndex; j++){
			a[j] *= i;
			a[j] += carry;
			carry = a[j]/10;
			a[j] %= 10;
		}
		while(carry){
			a[j] = carry%10;
			carry /= 10;
			j++;
		}
		j--;
		if(j>maxIndex){
			maxIndex = j;
		}
	}
	for(i=maxIndex;i>=0;i--){
		putchar(a[i]+'0');
	}
	putchar('\n');
}



你可能感兴趣的:(阶乘,ACM,南邮OJ)