题目大意:给出一个表达式,要求求出表达式的最大值和最小值
解题思路:先相加再相乘就是最大值,先相乘再相加就是最小值
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;
long long num[100];
char sign[100];
int main() {
int test;
scanf("%d", &test);
while(test--) {
long long a;
scanf("%lld", &a);
stack<long long> s1;
stack<long long> s2;
s1.push(a);
s2.push(a);
long long max = 1;
long long min = 0;
char ch;
while((ch = getchar()) != '\n') {
scanf("%lld",&a);
if(ch == '+') {
s2.push(a);
max = s1.top();
s1.pop();
max = max + a;
s1.push(max);
}
else if(ch == '*'){
s1.push(a);
min = s2.top();
s2.pop();
min = min * a;
s2.push(min);
}
}
long long max2 = 1, min2= 0;
while(!s1.empty()) {
max = s1.top();
max2 = max * max2;
s1.pop();
}
while(!s2.empty()) {
min = s2.top();
min2 = min + min2;
s2.pop();
}
printf("The maximum and minimum are %lld and %lld.\n",max2,min2);
}
return 0;
}