计算逆波兰表达式

原创 2018年04月17日 11:52:57

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) {
        int a,b;
        stack<int> A;
        for(int i=0;i<tokens.size();i++)
        {
            if(tokens[i]=="*")
            {
                a=A.top();
                A.pop();
                b=A.top();
                A.pop();
                A.push(a*b);
            }
            else if(tokens[i]=="-")
            {
                  a=A.top();
                A.pop();
                b=A.top();
                A.pop();
                A.push(b-a);
            } 
            else if(tokens[i]=="+")
            {
                 a=A.top();
                A.pop();
                b=A.top();
                A.pop();
                A.push(a+b);
            } 
            else if(tokens[i]=="/")
            {
                 a=A.top();
                A.pop();
                b=A.top();
                A.pop();
                if(a==0)
                    return -1;
                else
                    A.push(b/a);
            }
            else
            {
                A.push(atoi(tokens[i].c_str()));
            }
        }
        return A.top();
    }
};
遇到除法一定要检查被除数是否为0!!!!!!!!!!!!!!!!!!!!!!!
依次将vector中的元素压入栈中,如果不是操作符,直接转成int压入栈,如果是操作符,取栈顶两个元素进行运算,并将运算结果重新压入栈中

Python小练习:逆波兰表达式计算

又好久没用python,做一个小练习复习一下: Evaluate the value of an arithmetic expression in Reverse Polish Notati...
  • zhangla1220
  • zhangla1220
  • 2014-09-04 22:07:04
  • 1156

逆波兰表达式的生成及计算

逆波兰表达式(后缀表达式)生成算法:(1)构造一个运算符栈,此运算符在栈内遵循越往栈顶优先级越高的原则。(2)读入一个用中缀表示法表示的简单算术表达式,为方便起见,认为地在字符串后面加入一个特殊字符“...
  • signsmile
  • signsmile
  • 2008-09-04 07:20:00
  • 2607

利用逆波兰表达式求算数表达式的值

算数表达式即中缀表达式,而逆波兰表达式即为后缀表达式。 例如: 中缀表达式:  2+3*8+9-(1+4)/2 = 后缀表达式:  2 3 8 * 9 1 4 + 2 / - + + = 而这两者之间...
  • u010073953
  • u010073953
  • 2014-04-01 18:02:36
  • 977

逆波兰表达式的C++实现

  • 2011年01月11日 15:40
  • 3KB
  • 下载

逆波兰表达式实现计算器(附c++代码)

要实现一个简单的计算器,可以对+,-,*,/,(,)进行处理并返回正确的值,最先想到的就是逆波兰表达式实现之.首先,用到第一个栈把算式转化为逆波兰表达式存一个数组中,在使用另一个栈对这个数组进行,判断...
  • HLYHero
  • HLYHero
  • 2015-08-17 23:04:57
  • 3827

Python处理逆波兰表达式

Python处理逆波兰表达式的方法
  • xpresslink
  • xpresslink
  • 2017-08-16 15:57:18
  • 322

实现逆波兰表达式(后缀表达式)的运算结果

在栈的应用中有一个最经典的例题,那就是逆波兰表达式的求值。 enum OPERATOR//定义一个枚举类型 { DATA,//数字 ADD,//下面为操作 SUB, MUL, DIV, }...
  • z517602658
  • z517602658
  • 2017-04-21 13:50:12
  • 696

栈_逆波兰表达式_计算器实现_Golang版本

逆波兰表达式可以讲复杂的计算过程转化为简单的操作过程,进而得出答案。 比如 (a+b)*(b-c) 按照逆波兰表达式的规则得到 :ab+bc-*   将该表达式的字符以及符号,按照从左到右的顺序,依次...
  • u012807459
  • u012807459
  • 2015-02-01 09:25:08
  • 998

算法学习之递归--逆波兰表达式

递归的作用: 1) 替代多重循环 2) 解决本来就是用递归形式定义的问题 3) 将问题分解为规模更小的子问题进行求解 .... 这次我们用递归来解决递归形式的问题。 逆波兰表达...
  • qq_27474589
  • qq_27474589
  • 2017-08-22 09:29:15
  • 302
收藏助手
不良信息举报
您举报文章:计算逆波兰表达式
举报原因:
原因补充:

(最多只允许输入30个字)