-
题目描述:
-
输入一个正整数N,输出N的阶乘。
-
输入:
-
正整数N(0<=N<=1000)
-
输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
-
样例输入:
-
4 5 15
-
样例输出:
-
24 120 1307674368000
-
来源:
- 2006年清华大学计算机研究生机试真题
-
- 这里要考虑大数的相乘的问题
-
-
<span style="font-size:24px;">#include <stdio.h> int main() { int N; while (scanf("%d", &N) != EOF) { int Ret[10000] = {0}; int len = 1; //阶乘结果的长度 Ret[0] = 1; //fact(0) = fact(1) = 0 for (int i = 2; i <= N; ++i) { //fact(n) = fact(n-1) * n for (int j = 0; j < len; ++j) { Ret[j] *= i; } //处理进位 for (int j = 0; j < len; ++j) { if (Ret[j] >= 10) { Ret[j + 1] += Ret[j] / 10; Ret[j] = Ret[j] % 10; if (j == len - 1) { ++len; } } } } for (int i = len - 1; i >= 0; --i) { printf("%d",Ret[i]); } printf("\n"); } return 0; }</span>