时间限制:3 秒
内存限制:128 兆
特殊判题:否
提交:6384
解决:2238
- 题目描述:
-
输入一个正整数N,输出N的阶乘。
- 输入:
-
正整数N(0<=N<=1000)
- 输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
- 样例输入:
-
4 5 15
- 样例输出:
-
24 120 1307674368000
- 来源:
- 2006年清华大学计算机研究生机试真题
思路:
数很大,long long都表示不了,实际考察的是大整数乘法。
我写的代码可以实现,但应该有比较大的优化余地。
代码:
#include <stdio.h>int main(void)
{int n;int a[3001];int i, j;while (scanf("%d", &n) != EOF){for (j=0; j<3001; j++)a[j] = 0;a[0] = 1;for (i=1; i<=n; i++){for (j=0; j<3*i; j++)a[j] *= i;for (j=0; j<3*i; j++){if (a[j] >= 10){a[j+1] += a[j]/10;a[j] %= 10;}}}for (i=3*n; i>=0; i--){if (a[i] != 0)break;}//printf("%d\n\n", i);for (j=i; j>=0; j--)printf("%d", a[j]);printf("\n");}return 0;
}
/**************************************************************Problem: 1076User: liangrx06Language: CResult: AcceptedTime:2390 msMemory:912 kb
****************************************************************/