题目链接:https://www.tyvj.cn/Problem_Show.aspx?id=1260
分析:
贪心。
由基本不等式得:相加和相等的两数,他们越接近,乘积越大。所以多个数也一样。
构造以1为公差的等差数列,使他们的和接近总数,然后把剩下的从大到小逐渐加入到数列中,最后求积。
代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int i=2,sum=0,ji=1,a[1000],n;
cin>>n;
for (;;)
{
sum+=i;
if (sum>n) {sum-=i;break;}
a[ji++]=i;
i++;
}
ji--;
int yu=n-sum;
if (yu!=0)
{
int g=ji;
while (yu>0)
{
a[g]++;
g--;yu--;
if (g==0) g=ji;
}
}
int re[100]={1},wei=1;
re[1]=1;
for (int i=1;i<=ji;i++)
{
// cout<<a[i]<<endl;
for (int j=1;j<=100;j++)
{
re[j]*=a[i];
}
for (int j=1;j<=100;j++)
if (re[j]>=10)
{
re[j+1]+=re[j]/10;
re[j]%=10;
}
}
wei=60;
while (re[wei]==0) wei--;
cout<<re[wei];wei--;
for (int i=wei;i>=1;i--)
{
cout<<re[i];
}
return 0;
}