NC216 逆波兰表达式求值
逆波兰表达式求值
https://www.nowcoder.com/practice/885c1db3e39040cbae5cdf59fb0e9382?tpId=196&tqId=39409&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26pageSize%3D50%26search%3D%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=581&title=
用栈求后缀表达式的值
class Solution {
public:
int evalRPN(vector<string>& tokens) {
int n=tokens.size();
//用一个栈来求后缀表达式
stack<int>stack1;
int t1,t2;
//遍历整个后缀表达式
//如果是+-*/则将栈顶的两个元素弹出,求出对应的值后将该值压入栈中,注意顺序,+和*顺序换一下没有区别,-/交换位置后就有区别
for(int i=0;i<n;i++){
if(tokens[i]=="+"){
t1=stack1.top();
stack1.pop();
t2=stack1.top();
stack1.pop();
stack1.push(t1+t2);
}else if(tokens[i]=="-"){
t1=stack1.top();
stack1.pop();
t2=stack1.top();
stack1.pop();
stack1.push(t2-t1);
}else if(tokens[i]=="*"){
t1=stack1.top();
stack1.pop();
t2=stack1.top();
stack1.pop();
stack1.push(t1*t2);
}else if(tokens[i]=="/"){
t1=stack1.top();
stack1.pop();
t2=stack1.top();
stack1.pop();
stack1.push(t2/t1);
}else{
//stoi函数可以将对应的字符串转化为数字
stack1.push(stoi(tokens[i]));
}
}
return stack1.top();
}
};