时间限制:C/C++ 3秒,其他语言6秒

空间限制:C/C++ 32768K,其他语言65536K

64bit IO Format: %lld


题目描述



给定一个整数N(0≤N≤10000),求取N的阶乘


输入描述:

多个测试数据,每个测试数据输入一个数N


输出描述:

每组用一行输出N的阶乘



示例1




输入



1
2
3



输出



1
2
6
思路:就是一个大数阶乘问题,就是数据有点大,可能无法确定数组大小,可以用斯特灵公式计算n最大是阶乘的位数,避免越界,类似的求阶乘位数例题:javascript:void(0)



#include <stdio.h>

void jiecheng(int a[37000], int n, int *len){
int i, j, q = 0;
int alen = *len;
alen = 1;
a[0] = 1;
for(i = 1; i <= n; i++)
{
for(j = 0; j < alen; j++)
{
a[j] = a[j] * i + q;
q = a[j] / 10;
a[j] = a[j] % 10;
}
while(q > 0){
alen++;
a[j]= q % 10;
q = q / 10;
j++;
}

}
*len = alen;
}


int main(){
int a[37000], n, i, len; //位数不会超过3600

while(scanf("%d", &n) != EOF){
if(n == 0)
printf("0\n");
else{
jiecheng(a, n, &len);
for(i = len - 1; i >= 0; i--)
printf("%d", a[i]);
printf("\n");
}

}
return 0;
}