/*有一个只有加法和乘法的算术式,假设你可以合法的任意加括号,
请求出这个算术式能得到的最大值和最小值。
参与运算的数字都是正整数,数字个数不超过20。每个数字的大小不超过20。
输入
一行,一个合法的算术式,两项项之间都有一个空格。
输出
两行,第一行为能得到的最大值,第二行为能得到的最小值。
样例输入
2 + 3 * 5 + 4 =
样例输出
45
21
最大:先加后乘
最小:先乘后加
#include <cstdio> //完美兼容了C的语法
#include <cstring> //字符串函数
#include <iostream> //流
using namespace std;
int sum[50],product[50]; //全局整形数组
char sign[50]; //全局字符数组
int main()
{
int len=1;
cin >> sum[1]; //2
product[1]=sum[1]; //2
while(cin >> sign[len]) //符号
{
if(sign[len]=='=') break;
len++;
cin >> sum[len];
product[len]=sum[len];
}
int min=0,max=1;
for(int i=1;i<len;i++) //遍历运算符
{
if(sign[i]=='*')
{
product[i+1]=product[i]*product[i+1]; //运算符后元素值等于之积
product[i]=0; //运算符前元素等于0
}
if(sign[i]=='+')
{
sum[i+1]=sum[i]+sum[i+1]; //运算符后元素值等于之和
sum[i]=1; //运算符前元素等于1
}
}
for(int i=1;i<=len;i++)
{
min+=product[i];
max*=sum[i];
}
cout << max <<endl << min; //输出
return 0;
}