题目:一个只有“+”和“*”的算式,得到的结果最大为先算加法,再算乘法。得到的最小结果为先算乘法,再算加法。
Sample input
3
1+2*3*4+5
4*18+14+7*10
3+11+4*1*13*12*8+3*3+8
Sample output
The maximum and minimum are 81 and 30.
The maximum and minimum are 1560 and 156.
The maximum and minimum are 339768 and 5023.
#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
queue<char> myque;
queue<char> myque2;
int cal1(){
int temp1=0,temp2=0,temp3=0;
char s;
while(!myque.empty()){
s=myque.front();
if(s>='0'&&s<='9') {temp1=10*temp1+(int)(s-'0');myque.pop();}
if(s=='+'){temp2+=temp1;temp1=0;myque.pop();}
if(s=='*'){temp3=temp1+temp2;myque.pop();break;}
if(myque.empty()!=0){temp3=temp1+temp2;}
}
return temp3;
}
int CAL1(){
int temp=1;
while(!myque.empty()){
temp=temp*cal1();
}
return temp;
}
int cal2(){
int temp1=0,temp2=1,temp3=1;
char s;
while(!myque2.empty()){
s=myque2.front();
if(s>='0'&&s<='9') {temp1=10*temp1+(int)(s-'0');myque2.pop();}
if(s=='*'){temp2=temp2*temp1;temp1=0;myque2.pop();}
if(s=='+'){temp3=temp1*temp2;myque2.pop();break;}
if(myque2.empty()!=0){temp3=temp1*temp2;}
}
return temp3;
}
int CAL2(){
int temp=0;
while(!myque2.empty()){
temp=temp+cal2();
}
return temp;
}
int main(){
int times;
char c;
scanf("%d",×);
getchar();
while(times--){
while(scanf("%c",&c)){
if(c=='\n') break;
myque.push(c);
myque2.push(c);
}
printf("The maximum and minimum are %d and %d.\n",CAL1(),CAL2());
}
}