遇到+-,要把前面的运算都完成
遇到乘除,若之前的运算符是乘除的话,则运算乘除,否则不运算
【若乘除连着几个,后一个乘除都会先计算前一个乘除】
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();
}
};
本文介绍了一种基于栈实现的表达式求值算法,该算法能够处理加减乘除四则运算,并通过优先级判断来确保正确的计算顺序。文章详细解释了如何遍历输入字符串并根据运算符的不同进行相应的数值计算。
1672

被折叠的 条评论
为什么被折叠?



