题目链接:http://codeup.cn/problem.php?cid=100000593&pid=1
题目描述
输入一个正整数N,输出N的阶乘。
输入
正整数N(0<=N<=1000)
输出
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入
0
4
7
样例输出
1
24
5040
代码
#include<cstdio>
#include<cstring>
struct bign {
int d[100010]; //数组要足够大
int len;
bign () {
memset(d, 0, sizeof(d));
len = 0;
}
};
bign charge(char str[]) {
bign a;
a.len = strlen(str);
for(int i = 0; i < a.len; i++)
a.d[i] = str[a.len - 1 - i] - '0';
return a;
}
void print(bign a) {
for(int i = a.len - 1; i >= 0; i--)
printf("%d", a.d[i]);
printf("\n");
}
bign comput(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 != 0) {
c.d[c.len ++] = carry % 10;
carry /= 10;
}
return c;
}
int main () {
int n;
while(scanf("%d", &n) != EOF){
bign ans;
ans.d[0] = 1; //从1开始
ans.len = 1;
for(int i = 2; i <= n; i++)
ans = comput(ans, i);
print(ans);
}
return 0;
}