遇到+-,要把前面的运算都完成
遇到乘除,若之前的运算符是乘除的话,则运算乘除,否则不运算
【若乘除连着几个,后一个乘除都会先计算前一个乘除】
class Solution {
public:
int get_new_num(int a,int op,int b){
switch(op){
case 1: return a+b;
case 2: return a-b;
case 3: return a*b;
default: return a/b;
}
}
int calculate(string s) {
s.push_back('+');
stack<int> op,num;
int val=0;
for(auto& x:s){
switch(x){
case '+':
case '-':
num.push(val);val=0;
while(!op.empty()){
int b=num.top(),f=op.top();
num.pop(),op.pop();
int a=num.top();num.pop();
num.push(get_new_num(a,f,b));
}
op.push((x=='+'? 1:2));
break;
case '*':
case '/':
num.push(val); val=0;
if(!op.empty() && op.top()>2){
int b=num.top(),f=op.top();
num.pop(),op.pop();
int a=num.top();num.pop();
num.push(get_new_num(a,f,b));
}
op.push((x=='*'? 3:4));
break;
case ' ':
break;
default:
val=val*10+x-'0';
break;
}
}
return num.top();
}
};