这道题是一个典型的高精度乘低精度... 话不多说, 直接上代码, 有不懂的看注释
#include <bits/stdc++.h> // 万能头
using namespace std;
int a[40000];
int main() {
int n;
cin >> n; // 输入
a[1] = 1; // 初始1的阶乘是1
a[0] = 1; // a数组的位数
for(int i = 2; i <= n; i++) {
int t = 0; // t 代表进位
for(int j = 1; j <= a[0]; j++) {
a[j] = a[j] * i + t; // 每次都加上进位
t = a[j] / 10; // 直接算进位
a[j] %= 10; // 剩个位
}
while(t > 0) { // 处理进位
a[0] ++; // 有进位,怕不够,于是我向前加了一位...
a[a[0]] = t % 10; // 直接首位加上进位
t /= 10;
}
}
printf("%d!=",n);
for(int i = a[0]; i > 0; i--) { // 输出
cout << a[i];
}
return 0; // 完结撒花ヽ(°▽°)ノ ...
}
综合来看, 本体最大的考点就在于:第13行~第23行。 ✿✿ヽ(°▽°)ノ✿
比赛已结束。