社区讨论

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 条回复,欢迎继续交流。

正在加载回复...