P1249 最大乘积 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
来自洛谷上的题解
特殊情况:如果sum恰好是n+1,则把2去掉将最后一个数加一。
#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
const int N=10010;
int a[N];
vector<int> mul(vector<int>a,int b)
{
int t=0;
vector<int>c;
for(int i=0;i<a.size();i++)
{
t=t+a[i]*b;
c.push_back(t%10);
t/=10;
}
while(t)
{
c.push_back(t%10);
t/=10;
}
return c;
}
int main()
{
int n;
cin>>n;
vector<int>res;
res.push_back(1);
ll sum=0,t=0;
for(int i=2;sum<=n;i++)
{
sum+=i;
a[t++]=i;
}
if(sum==n+1)
{
a[t-1]++;
for(int i=1;i<t;i++)
{
cout<<a[i]<<" ";
res=mul(res,a[i]);
}
puts("");
for(int i=res.size()-1;i>=0;i--)
cout<<res[i];
return 0;
}
else
{
for(int i=0;i<t;i++)
{
if(a[i]!=sum-n)
{
cout<<a[i]<<" ";
res=mul(res,a[i]);
}
}
puts("");
for(int i=res.size()-1;i>=0;i--)
cout<<res[i];
return 0;
}
}