HDU-OJ Problem - 1042
N!
Language : G++
#include<stdio.h>
#include<string.h>
#define MAXN 40000 //10000! 一共有 30000+ 位,所以数组大小设为40000;
char result[MAXN];
void multi_up(int n);
int main(void){
int n,i,j,k;
while(scanf("%d",&n)!=EOF){
/*
* 初始化数组;
*/
for(i=1;i<MAXN;++i)
result[i]='0';
result[MAXN-1]='1';
result[MAXN]='\0';
if(n==0 || n==1) printf("1\n");
else{
for(i=2;i<=n;++i) //计算阶乘;
multi_up(i);
for(i=0;i<MAXN;++i) //除去数组前面的0;
if(result[i]> '0' && result[i]<='9')
break;
puts(result+i);
}
}
return 0;
}
//当前数乘n,并进位 ;
void multi_up(int n){
int i, temp;
for(i = MAXN-1,temp = 0;i >= 0; --i){
if(result[i] >= '0' && result[i] <= '9'){
temp += (result[i]-'0') * n;
result[i] = '0' + temp % 10;
temp /= 10;
}
else
break;
}
}