算法笔记练习 5.6 大整数运算 问题 B: N的阶乘
题目
题目描述
输入一个正整数N,输出N的阶乘。
输入
正整数N(0<=N<=1000)
输出
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入
0
4
7
样例输出
1
24
5040
思路
参考算法笔记 P174。
代码
#include <cstdio>
#include <cstring>
#define MAX 3000
struct bign {
int d[MAX];
int len;
bign() {
memset(d, 0, sizeof(d));
len = 0;
}
};
bign change(const char *str) {
bign a;
a.len = strlen(str);
for (int i = 0; i != a.len; ++i)
a.d[i] = str[a.len - i - 1] - '0';
return a;
}
bign multi(bign a, int b) {
bign c;
int carry = 0;
for (int i = 0; i != a.len; ++i) {
int temp = a.d[i] * b + carry;
c.d[c.len++] = temp % 10;
carry = temp / 10;
}
while (carry) {
c.d[c.len++] = carry % 10;
carry /= 10;
}
return c;
}
void print(const bign &a) {
for (int i = 0; i != a.len; ++i)
putchar(a.d[a.len - i - 1] + '0');
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
if (n == 0) {
printf("1\n");
continue;
}
bign ans;
ans.d[0] = 1;
ans.len = 1;
for (int i = 1; i <= n; ++i)
ans = multi(ans, i);
print(ans);
putchar('\n');
}
return 0;
}