总之就是非常难受...
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
/*
贪心: 分割的数字越多 乘积越大
高精度乘法
*/
// 高精度乘法模板
vector<int> mul(vector<int> &A, int b)
{
vector<int> C;
int t = 0;
for (int i = 0; i < A.size() || t; i ++ )
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
int n,s = 2;
cin >> n;
vector<int> C;
int temp = 2;
while(s < n)
{
C.push_back(temp);
temp ++;
s += temp;
}
C.push_back(temp);
int y = s - n;
auto p = find(C.begin(), C.end(), y);
if(p == C.end())
{
for(int i=0; i<C.size();i++)
{
if(C[i] > y)
{
int b = C[i] - y;
C[i] = 1;
for(int j=C.size()-1;b;j--)
{
if(C[j] != 1)
{
C[j] ++;
b --;
}
}
break;
}
}
}else C.erase(p);
// C.erase(remove(C.begin(),C.end(),1),C.end());
auto pp = find(C.begin(),C.end(),1);
if(pp != C.end()) C.erase(pp);
for(auto p : C) cout << p << " ";
cout << endl;
vector<int> res;
res.push_back(1);
for(auto p : C) res = mul(res,p);
for(int i=res.size()-1;i>=0;i--) cout << res[i];
cout << endl;
return 0;
}