蒟蒻果冻的玄学问题
查看原帖
蒟蒻果冻的玄学问题
752555
_NightFire666_楼主2023/8/9 13:42

不知道咋地,高精度乘自测无误,贪心无误,贪心+高精度乘有误。ε(┬┬﹏┬┬)3

#include <bits/extc++.h>
#define int long long
using namespace std;
string mul(string s1, string s2) {
	int i, j, p;
	string answer;
	int a[50001], b[50001], c[50055];
	for (i = 0; i < (int)s1.size(); i++) {
		a[i] = s1[s1.size() - i - 1] - '0';
	}
	for (i = 0; i < (int)s2.size(); i++) {
		b[i] = s2[s2.size() - i - 1] - '0';
	}
	for (i = 0; i < (int)s1.size(); i++) {
		for (j = 0; j < (int)s2.size(); j++) {
			c[i + j] = c[i + j] + a[i] * b[j];
			if (c[i + j] >= 10) {
				c[i + j + 1] = c[i + j + 1] + c[i + j] / 10;
				c[i + j] = c[i + j] % 10;
			}
		}
	}
	for (i = s1.size() + s2.size() - 1; i >= 0; i--) {
		if (c[i] != 0) {
			p = i;
			break;
		}
	}
	for (i = p; i >= 0; i--)
		answer = answer + to_string(c[i]);
	return answer;
}
signed main() {
	vector<int>ans;
	int n, c = 2;
	cin >> n;
	while (n >= c) {
		n -= c;
		ans.push_back(c);
		c++;
	}
	c = ans.size() - 1;
	while (n) {
		ans[c]++;
		n--;
	}
	string C = "1";
	for (vector<int>::iterator it = ans.begin(); it != ans.end(); it++) {
		cout << *it << " ";
		C = mul(C, to_string(*it));
	}
	cout << "\n" << C;
	return 0;
}
2023/8/9 13:42
加载中...