阶乘的精确值

/*
2013-10-13
问题来源：
算法竞赛入门经典P72例
问题描述：
输入不超过1000的正整数n,输出n!=1*2*3*...*n的精确结果。
样例输入：30
样例输出：265252859812191058636308480000000
*/

#include <stdio.h>
#include <string.h>

const int maxN = 3000;
int main()
{
int result[maxN];
int input;
int i,j;
while(scanf("%d",&input) == 1)
{
//数组清零
memset(result,0,sizeof(result));
result[0] = 1;
for(i = 2; i<=input; i++)
{
int add = 0;
for(j = 0; j<maxN; j++)
{
//注意：不能以当前或者当前的下一个是否为0且进位为0就结束循环如5000*i就是一个反例！
int temp;
temp = result[j]*i + add;
result[j] = temp % 10;
add = temp / 10;
}
}
//显示结果，去掉前导0
for(i = maxN-1;i>0; i--)
if(result[i]) break;
for(j = i; j>=0; j--)
{
printf("%d",result[j]);
}
printf("\n");
}
return 0;
}