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

注意:一定要使用后出栈的操作数作为第一操作数,否则,对于没有对称操作的操作符会出错。

 C++实现代码:
#include<iostream>

#include<stack>

#include<vector>

#include<string>

#include<cstdlib>

using namespace std;



class Solution

{

public:

    int evalRPN(vector<string> &tokens)

    {

        stack<int> operand;

        int operand1;

        int operand2;

        if(tokens.empty())

            return 0;

        int i;

        for(i=0; i<(int)tokens.size(); i++)

        {

            if(tokens[i]=="+")

            {

                if(!operand.empty())

                {

                    operand1=operand.top();

                    operand.pop();

                }

                if(!operand.empty())

                {

                    operand2=operand.top();

                    operand.pop();

                }

                operand2+=operand1;

                operand.push(operand2);

            }

            else if(tokens[i]=="-")

            {

                if(!operand.empty())

                {

                    operand1=operand.top();

                    operand.pop();

                }

                if(!operand.empty())

                {

                    operand2=operand.top();

                    operand.pop();

                }

                operand2-=operand1;

                operand.push(operand2);

            }

            else if(tokens[i]=="*")

             {

                if(!operand.empty())

                {

                    operand1=operand.top();

                    operand.pop();

                }

                if(!operand.empty())

                {

                    operand2=operand.top();

                    operand.pop();

                }

                operand2*=operand1;

                operand.push(operand2);

            }

            else if(tokens[i]=="/")

             {

                if(!operand.empty())

                {

                    operand1=operand.top();

                    operand.pop();

                }

                if(!operand.empty())

                {

                    operand2=operand.top();

                    operand.pop();

                }

                operand2/=operand1;

                operand.push(operand2);

            }

            else

            {

                operand1=atoi(tokens[i].c_str());

                operand.push(operand1);

            }

        }

        return operand.top();

    }

};



int main()

{

    Solution s;

    vector<string> vec={"4","13","5","/","+"};

    cout<<s.evalRPN(vec)<<endl;

}

 

你可能感兴趣的:(eval)