九度OJ 1076:N的阶乘 (数字特性、大数运算)
- 题目描述:
-
输入一个正整数N,输出N的阶乘。
- 输入:
-
正整数N(0<=N<=1000)
- 输出:
-
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
- 样例输入:
-
4 5 15
- 样例输出:
-
24 120 1307674368000
思路:
数很大,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: 1076 User: liangrx06 Language: C Result: Accepted Time:2390 ms Memory:912 kb ****************************************************************/
编程算法爱好者。