题目:有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大,输出这个乘积m。
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
//有一个整数n,将n分解成若干个整数之和,问如何分解能使这些数的乘积最大?,输出这个乘积m
int n,i=0;
bool flag;//循环开始标志
char ch;//是否重新开始输入整数n,是,输入“y”或“Y”
unsigned long long m;//防止乘积m溢出
flag=true;
while (flag)
{
cout<<"请输入整数n:";//只讨论大于0的整数
cin>>n;
if(n<=4)//特殊情况
switch(n)
{
case 1:cout<<"不用分解,m=1";break;
case 2:cout<<"不用分解,m=2";break;
case 3:cout<<"不用分解,m=3";break;
case 4:cout<<"分解成4=2+2,m=4";break;
}
else
{
i=n/3;//取商
n=n%3;//取余
if(n==2)
{
m=pow((double) 3,i)*n;
cout<<"该整数可以分成"<<i<<"个3和1个2之和致使乘积最大"<<endl;
}
else if(n==0)
{ m=pow((double)3,i);
cout<<"该整数可以分成"<<i<<"个3之和致使乘积最大"<<endl;
}
else
{
m=pow((double)3,i-1)*4;
cout<<"该整数可以分成"<<i-1<<"个3和1个4之和致使乘积最大"<<endl;
}
cout<<"m="<<m;
}
cout<<"是否重新开始输入整数n,是,请输入Y或y"<<endl;
cin>>ch;
if (ch=='y'||ch=='Y')
flag=true;
else flag=false;
}
return 0;
}