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
#include <iostream> #include <vector> #include <stack> #include <string> #include <stdlib.h> using namespace std; int evalRPN(vector<string> &tokens) {
<span style="white-space:pre"> if(tokens.size() == 1){ <span style="white-space:pre"> </span>return atoi(tokens.at(0).c_str()); <span style="white-space:pre"> </span>}</span> stack<int> s; vector<string> :: iterator iter; int num = 0; int i = 0; int j = 0; for(iter = tokens.begin(); iter != tokens.end() ; iter++){ if(*iter == "+" || *iter == "-" || *iter == "*" || *iter == "/"){ j = s.top(); s.pop(); i = s.top(); s.pop(); if(*iter == "+" ) num = i + j; if(*iter == "-") num = i - j; if(*iter == "*") num = i * j; if(*iter == "/") num = i / j; s.push(num); } else{ s.push(atoi((*iter).c_str())); } } return num; } int main(){ string a[] = {"2", "1", "+", "3", "*"}; vector<string> tokens(a,a+5); cout<<evalRPN(tokens)<<endl; return 0; }