链接:https://www.nowcoder.net/acm/contest/75/E
来源:牛客网
时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给定一个整数N(0≤N≤10000),求取N的阶乘
输入描述:
多个测试数据,每个测试数据输入一个数N
输出描述:
每组用一行输出N的阶乘
示例1
输入
1 2 3
输出
1 2 6
思路:就是一个大数阶乘问题,就是数据有点大,可能无法确定数组大小,可以用斯特灵公式计算n最大是阶乘的位数,避免越界,类似的求阶乘位数例题:http://www.cnblogs.com/zhumengdexiaobai/p/8409127.html
#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 "); else{ jiecheng(a, n, &len); for(i = len - 1; i >= 0; i--) printf("%d", a[i]); printf(" "); } } return 0; }