时间限制: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;
}