经过第一轮的游戏,不少同学将会获得圣诞特别礼物,但这时细心的数学课代表发现了一个问题:留下来的人太多而使礼物数量可能不够,为此,加试了一道数学题:将一个正整数 n 分解成若干个互不相等的正整数的和,使得这些数的乘积最大,当主持人报出一个 n 后,请你立即将这个最大值报出来,现请你帮你的好友编一个程序来解决这个问题。
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<map>
#pragma GCC optimize(2)
#define ll long long
using namespace std;
int n,l,la;
int a[100005];
int ans[100005];
int main()
{
ans[0]=1;
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=2;i<=10000;i++)
{
if(n<i)
{
break;
}
else
{
n-=i;
}
a[la]=i;
la++;
}
for(int i=la-1;i>=la-n;i--)
{
a[i]++;
}
ll jy=0;
for(int i=0;i<la;i++)
{
for(int j=0;j<=10000;j++)
{
ans[j]=ans[j]*a[i]+jy;
jy=ans[j]/10;
ans[j]%=10;
}
}
int lans=10000;
while(ans[lans]==0)
{
lans--;
}
for(int i=lans;i>=0;i--)
{
cout<<ans[i];
}
return 0;
}