不知道咋地,高精度乘自测无误,贪心无误,贪心+高精度乘有误。ε(┬┬﹏┬┬)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;
}