南郵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,得られた積は720720で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('
'); }