采用10000进制
#include <stdio.h>
/*计算你的阶乘函数*/
void factoral(int n) {
static int num[10000 + 1];
// 初始化为1
num[0] = 1;
// 当前数字的位数
int digit_number = 1;
// 从二开始计算
for (int i = 2; i <= n; i++) {
// 是否进位
int carry = 0;
/*
2583
x 35
将35 分别与 3 8 5 2依次进行相乘 每次乘之后 进位
*/
for (int j = 0; j < digit_number; j++) {
// 采用10000进制 每次乘的时候加上进位
num[j] = num[j] * i + carry;
// 取得进位
carry = num[j] / 10000;
// 计算j位的数值
num[j] %= 10000;
}
// 最高位的进位 如果进位了 则当前数字的位数 digit_number + 1
if (carry > 0) {
num[digit_number++] = carry;
}
}
printf("%d", num[digit_number - 1]);
for (int i = digit_number - 2; i >= 0; i--) {
printf("%04d", num[i]);
}
printf("\n");
}
int main() {
int n;
while (scanf("%d", &n)) {
factoral(n);
}
return 0;
}