最大值与最小值

/*有一个只有加法和乘法的算术式,假设你可以合法的任意加括号,
请求出这个算术式能得到的最大值和最小值。
参与运算的数字都是正整数,数字个数不超过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;
}

猜你喜欢

转载自blog.csdn.net/uzzzhf/article/details/82976784