给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。
int integerBreak(int n){
int ret1 = 0, ret2 = 0;
for(int i = 2; i <= n; i++)
{
int result = 1;
int temp = 0;
for(int j = i; j > 0; j--)
{
result *= (int)((n-temp)/j);
temp += (int)((n-temp)/j);
}
ret1 = ret1 > result ? ret1 : result;
if(ret1 > ret2)
{
ret2 = ret1;
}
else
{
return ret2;
}
}
return ret2;
}
思路:数学方法
将整数拆分为2~n个数的和,然后再让它们乘积,它们中间最大的乘积为答案。让他们按着2 ~ n的顺序分别求出结果,假如在某处结果大小下降,那么该结果就为最终结果。