您的位置:首页 > 编程语言 > Lua

计算逆波兰式 (Evaluate Reverse Polish Notation)

2014-08-26 16:26 393 查看
这个题目比较容易,很像编译原理,所以很容易的一遍A过。

题目:

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

解题思路:

使用栈的思想,每次遇到数字压入顶端,遇到符号时弹出顶端的两个数字计算,并将结果再次压回栈中,最终栈里只有结果值。

代码:

 int evalRPN(vector<string> &tokens) {

        int i_stack[100];

        int i_top = 0;

        string s_now;

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

      {

    s_now = tokens[i];

    if(s_now.compare("+") != 0 && s_now.compare("-") != 0  && s_now.compare("*")
!= 0 && s_now.compare("/") != 0)

    {

    i_stack[i_top++] = atoi(s_now.c_str());

    }

    else //符号操作

    {

    i_top--;

    if(s_now.compare("+") == 0)  //没写{}

    i_stack[i_top - 1] = i_stack[i_top] + i_stack[i_top - 1];

    else if(s_now.compare("-") == 0)

    i_stack[i_top - 1] = i_stack[i_top - 1] - i_stack[i_top];

    else if(s_now.compare("*") == 0)

    i_stack[i_top - 1] = i_stack[i_top] * i_stack[i_top - 1];

    else 

    i_stack[i_top - 1] = i_stack[i_top - 1] / i_stack[i_top]; //没有判断为0的状况

    }

        }

        return i_stack[0];

    }

说明:

1.代码没有进行健壮性的考虑,没有处理非正确的逆波兰式的输入,没有对0的除法进行处理。

2.使用静态数组实现简单的栈功能,比使用C++本身的栈更直接。

3.RunTime 8ms

感受:一直知道自己很菜,但是由于写过简单编译器可能看到token就知道基本处理,而且编译原理课上也真的有讲过~

  认真听课还是有好处滴~嘻嘻             水水的过了还是蛮开心的!继续加油!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐