清华大学2006年机试-N的阶乘-1076
题目描述:
输入一个正整数N,输出N的阶乘。
输入
正整数N(0<=N<=1000)
输出
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入
4
5
15
样例输出
24
120
1307674368000
解题思路:
这道题是不能用递归去做的,因为数目过大,超过了long long的数据范围,只能模仿普通的算术方法,对每一位进行运算。
AC代码:
#include <cstdio>
#include <cstring>
const int maxn = 3010;
int N;
int res[maxn] = {0};
int init(){
int cnt = 1, tmp = 0, nt = 0;
res[0] = 1;
res[1] = 1;
int res1[maxn] = {0};
int res2[maxn] = {0};
int res3[maxn] = {0};
for(int i = 1; i <= N; i++){
for(int j = 1; j <= cnt; j++){
tmp = res[j] * i + nt;
res[j] = tmp % 10;
if (tmp >= 10) {
nt = tmp / 10;
if (j == cnt) cnt++;
}
else nt = 0;
}
}
return cnt;
}
int main(){
freopen("C:\\Users\\Administrator\\Desktop\\test.txt", "r", stdin);
while (scanf("%d", &N) != EOF){
if (N == 0){
printf("1\n");
continue;
}
memset(res, 0, sizeof(res));
int len = init();
//printf("%d\n", len);
for(int i = len; i >= 1; i--){
printf("%d", res[i]);
}
printf("\n");
}
fclose(stdin);
return 0;
}