题目描述
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
- 整数除法只保留整数部分。
- 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
解答
#include <stack>
#include <vector>
#include <iostream>
using namespace std;
class Solution
{
public:
int evalRPN(vector<string>& tokens) {
stack<int> temp;
int temp1,temp2;
for(int i = 0; i < tokens.size(); i++)
{
int c = int(tokens[i][0]);
if((c >= 48 && c <= 57) || (c == 45 && tokens[i].length() != 1))
temp.push(atoi(tokens[i].c_str()));
else if(c == 43)
{
temp1 = temp.top(); temp.pop();
temp2 = temp.top(); temp.pop();
temp.push(temp2 + temp1);
continue;
}
else if(c == 42)
{
temp1 = temp.top(); temp.pop();
temp2 = temp.top(); temp.pop();
temp.push(temp2 * temp1);
continue;
}
else if(c == 45)
{
temp1 = temp.top(); temp.pop();
temp2 = temp.top(); temp.pop();
temp.push(temp2 - temp1);
continue;
}
else if(c == 47)
{
temp1 = temp.top(); temp.pop();
temp2 = temp.top(); temp.pop();
temp.push(temp2 / temp1);
continue;
}
}
return temp.top();
}
};
int main(void)
{
vector<string> test;
test.push_back("10");
test.push_back("6");
test.push_back("9");
test.push_back("3");
test.push_back("+");
test.push_back("-11");
test.push_back("*");
test.push_back("/");
test.push_back("*");
test.push_back("17");
test.push_back("+");
test.push_back("5");
test.push_back("+");
Solution t;
std::cout << t.evalRPN(test);
int i;
cin >> i;
return 0;
}