比较简洁的代码:考上研后详细整理
#include <iostream>
//将n分解为不同自然数之和使乘积最大:方法:
// n>=4时,分解满足乘积>和
int getMaxMultiply(int n) {
//存储最大,余数,因子数组,当前自然数值,临时,数组指针
int res = 1, remainder = n - 2, factor[10] = {2}, curr = 3, j = 1;
if (n <= 4)
return n; //此时不需分解:只会变小
while (remainder - curr > 0) {
factor[j++] = curr;
remainder -= curr++;
}
j--; //用于指向非零元素的校正
while (remainder) {
factor[j--] += 1;
remainder -= 1;
}
for (int i : factor) {
if (!i)
break;
res *= i;
}
return res;
}
int main() { std::cout << getMaxMultiply(13); }