题目描述
根据逆波兰表示法,求表达式的值。(即后缀表达式)
有效的运算符包括 +
, -
, *
, /
。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
题解
要用到栈的结构吧,遇到一个操作符就弹出两个操作数,然后压入计算结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| int evalRPN(vector<string>& tokens) { stack<int> st; int num = tokens.size(); int res = 0; for (int i = 0; i < num; i++) { string tk = tokens[i]; if (tk == "+") { int op1 = st.top(); st.pop(); int op2 = st.top(); st.pop(); op1 += op2; st.push(op1); } else if(tk=="-") { int op1 = st.top(); st.pop(); int op2 = st.top(); st.pop(); op2 -= op1; st.push(op2); } else if (tk == "*") { int op1 = st.top(); st.pop(); int op2 = st.top(); st.pop(); op1 *= op2; st.push(op1); } else if (tk == "/") { int op1 = st.top(); st.pop(); int op2 = st.top(); st.pop(); op2 /= op1; st.push(op2); } else { int tmp = stoi(tk); st.push(tmp); } } return st.top(); }
|