社区讨论
0分求调
P1009[NOIP 1998 普及组] 阶乘之和参与者 3已保存回复 9
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 9 条
- 当前快照
- 1 份
- 快照标识符
- @mljfm47x
- 此快照首次捕获于
- 2026/02/12 20:25 7 天前
- 此快照最后确认于
- 2026/02/15 12:55 4 天前
CPP
#include <iostream>
#include <algorithm>
#include <cstring>
#define Please return
#define AC 0
//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
using namespace std;
const int MAXN = 50 + 5;
int n, ans[MAXN], mul[MAXN];
void add(int a[], int b[], int c[]) {
c[0] = max(a[0], b[0]);
for (int i = 1; i <= c[0]; i++) {
c[i] += a[i] + b[i];
if (c[i] >= 10) {
c[i] -= 10;
c[i + 1]++;
}
}
if (c[c[0] + 1] > 0) {
c[0]++;
}
}
void multiply(int a[], int k, int c[]) {
c[0] = a[0];
for (int i = 1; i <= c[0]; i++) {
c[i] += a[i] * k;
if (c[i] >= 10) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
while (c[c[0]] == 0 && c[0] > 1) {
c[0]--;
}
if (c[c[0] + 1] > 0) {
c[0]++;
}
}
void print(int a[]) {
for (int i = a[0]; i >= 1; i--) {
cout << a[i];
}
cout << endl;
}
int main() {
ans[0] = 1;
cin >> n;
for (int i = 1; i <= n; i++) {
memset(mul, 0, sizeof(mul));
mul[0] = mul[1] = 1;
for (int j = 1; j <= i; j++) {
multiply(mul, j, mul);
}
add(ans, mul, ans);
}
print(ans);
Please AC;
}
回复
共 9 条回复,欢迎继续交流。
正在加载回复...