蓝桥杯_波兰表达式(前缀表达式)_A组
与力扣150.逆波兰表达式遍历方向相反
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
//使用栈
//逆波兰表达式是每当遍历到一个运算符,就拿出刚刚遍历到的两个数
//从前往后进行运算
//真实难度:简单,只用到了栈
stack<int>s;
bool isOperator( char token) {
switch (token) {
case '+':return true;
case '-':return true;
case '*':return true;
case '/':return true;
default:return false;
}
}
int calculate(int left,int right,char token) {
switch (token) {
case '+' : return left + right ;
case '-' : return left - right;
case '*' : return left * right;
default : return left / right;
}
}
int main() {
string tokens ="";
cin >> tokens;
int n = tokens.size();
for (int i = n-1 ; i >= 0;i--) {
/*
3+5*(2+6)-1
<===遍历方向
左 右
- + 3 * 5 + 2 6 1
*/
if (isOperator(tokens[i])) {//计算
int left = s.top();
s.pop();
int right = s.top();
s.pop();
s.push(calculate(left, right, tokens[i]));
}
else {//入栈
s.push(tokens[i]-'0');
//cout << s.top()<<endl;
}
}
cout << s.top();
}