输入一个正整数n,输出n!的值
n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法
#include <cstdio>
#include <cstring>
#include <iostream>
#define maxSize 3000
using namespace std;
int main() {
int a[maxSize];//再小测试点会越界【1000!位数大致在2570左右】
memset(a, 0, sizeof(a));
int n, s, r = 0, index = 0;//index记录当前和的位数
cin >> n;
a[0] = 1;
for (int k = 2; k <= n; k++) {
for (int i = 0; i <= index; i++) {
s = a[i] * k + r;//相乘+进位
a[i] = s % 10;//每一位的运算结果
r = s / 10;//进位
}
while (r != 0) {//最高进位
a[++index] = r % 10;
r = r / 10;
}
}
for (int i = index; i >= 0; i--)//倒序输出
printf("%d", a[i]);
return 0;
}