题目大意:给出一个只有 + 和 * 的式子,求出不同运算顺序下得到的答案中的最大值和最小值。
解题思路:显然先加再乘最大,先乘再加最小。开两个栈去存储。上个月数据结构刚学的用栈转后缀计算,毕竟这个只有两种就不用那么复杂了。注意一下这题数据比较大要用 long long
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<stack>
using namespace std;
stack<long long> add, mul;
int main() {
int n;
scanf("%d", &n);
while (n--) {
int num;
scanf("%d", &num);
add.push(num);
mul.push(num);
char op;
long long tmp;
while (scanf("%c", &op) && op != '\n') {
scanf("%d", &num);
if (op == '+') {
mul.push(num);
tmp = add.top();
add.pop();
add.push(tmp+num);
}
else if (op == '*') {
add.push(num);
tmp = mul.top();
mul.pop();
mul.push(tmp*num);
}
}
long long MAX = 1, MIN = 0;
while (!add.empty()) {
MAX *= add.top();
add.pop();
}
while (!mul.empty()) {
MIN += mul.top();
mul.pop();
}
printf("The maximum and minimum are %lld and %lld.\n", MAX, MIN);
}
return 0;
}