社区讨论

90分,大佬带我

P1249最大乘积参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo7ld6sj
此快照首次捕获于
2023/10/27 03:42
2 年前
此快照最后确认于
2023/10/27 03:42
2 年前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
long long a, b = 1, c = 0;
int y[20001], m = 20000;
void nb(int x) {
	y[0] = 1;
	for (int i = 2; i <= x; i++) {
		for (int k = 0; k < 20001; k++)
			y[k] *= i;
		for (int k = 0; k < 20001; k++)
			if (y[k] > 9) {
				y[k + 1] += y[k] / 10;
				y[k] %= 10;
			}
	}
}
int main() {
	cin >> a;
	if (a == 3) {
		cout << 1 << " " << 2 << endl << 2;
		return 0;
	}if (a == 4) {
		cout << 1 << " " << 3 << endl << 3;
		return 0;
	}
	if (a > 4) {
		while (c < a) {
			b++;
			c += b;
		}
		if (c == a) {
			for (int i = 2; i <= b; i++)
				cout << i << " ";
			cout << endl;
			nb(b);
			for (m; m >= 0; m--)
				cout << y[m];
		}if (c - a == 1) {
			y[0] = 1;
			for (int i = 3; i <= b + 1; i++) {
				if (i == b) continue;
				cout << i << " ";
				for (int k = 0; k < 20001; k++)
					y[k] *= i;
				for (int k = 0; k < 20001; k++)
					if (y[k] > 9) {
						y[k + 1] += y[k] / 10;
						y[k] %= 10;
					}
			}cout << endl;
			for (m; m >= 0; m--)
				cout << y[m];
		}if (c > a + 1) {
			long long  p = c - a;
			y[0] = 1;
			for (int i = 2; i <= b; i++) {
				if (i == p) continue;
				cout << i << " ";
				for (int k = 0; k < 20001; k++)
					y[k] *= i;
				for (int k = 0; k < 20001; k++)
					if (y[k] > 9) {
						y[k + 1] += y[k] / 10;
						y[k] %= 10;
					}
			}cout << endl;
			while (y[m] == 0 && m > 0) m--;
			for (m; m >= 0; m--)
				cout << y[m];
		}
	}
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...