题目:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/
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
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<int> stk;
double oper_1=0.0, oper_2=0.0;
for (vector<string>::iterator iter = tokens.begin();
iter != tokens.end(); ++iter){
if (*iter == "+"){
oper_1 = stk.top(); stk.pop();
oper_2 = stk.top(); stk.pop();
stk.push(oper_2 + oper_1);
}
else if (*iter == "-") {
oper_1 = stk.top(); stk.pop();
oper_2 = stk.top(); stk.pop();
stk.push(oper_2 - oper_1); // 注意这里的先后顺序
}
else if (*iter == "*"){
oper_1 = stk.top(); stk.pop();
oper_2 = stk.top(); stk.pop();
stk.push(oper_2 * oper_1);
}
else if (*iter == "/"){
oper_1 = stk.top(); stk.pop();
oper_2 = stk.top(); stk.pop();
stk.push(oper_2 / oper_1); // 注意这里的先后顺序
}
else{
stk.push(atoi(iter->c_str()));
}
}
return stk.top();
}
};