问题描述:
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
用逆波兰表示法计算算术表达式的值。
有效运算符为+,-,*,/。每个操作数可以是整数或另一个表达式
问题解决(c\c++):
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<int> mystack;
int size = tokens.size();
int i = 0;
for(; i< size; i++){
if(tokens[i] == "+"){
a = mystack.top();
mystack.pop();
b = mystack.top() + a;
mystack.pop();
mystack.push(b);
}
else if(tokens[i] == "-"){
a = mystack.top();
mystack.pop();
b = mystack.top() - a;
mystack.pop();
mystack.push(b);
}
else if(tokens[i] == "*"){
a = mystack.top();
mystack.pop();
b = mystack.top() * a;
mystack.pop();
mystack.push(b);
}
else if(tokens[i] == "/"){
a = mystack.top();
mystack.pop();
b = mystack.top() / a;
mystack.pop();
mystack.push(b);
}
else{
temp = atoi(tokens[i].c_str());
mystack.push(temp);
}
}
return mystack.top();
}
public:
int a;
int b;
int temp;
};