题解 | #逆波兰表达式求值#

逆波兰表达式求值

https://www.nowcoder.com/practice/885c1db3e39040cbae5cdf59fb0e9382

首先明白token的形式

其次用一个数组储存运算过程

数字就放进去,运算符就调两个数字运算,直到结果。

/**

 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

 *

 *

 * @param tokens string字符串一维数组

 * @param tokensLen int tokens数组长度

 * @return int整型

 */

int evalRPN(char** tokensint tokensLen ) {

 

    int  a[10000];

    int  p = 0;

    int p1 = 0;

    while (tokensLen--) {

        if ( strcmp(tokens[p1],"+")!=0&&strcmp(tokens[p1],"-")!=0&& strcmp(tokens[p1],"*")!=0&&strcmp(tokens[p1],"/")!=0) {

            a[p] = atoi(tokens[p1]);

            p++;

            p1++;

             printf("数字%d\n",a[p]);

            continue;

        }

        if ( strcmp(tokens[p1],"+")==0) {

            a[p - 2] = a[p - 2] + a[p - 1];

            p = p - 1;

        } else if ( strcmp(tokens[p1],"-")==0) {

             printf("运算%d\n",p);

            a[p - 2] = a[p - 2] - a[p - 1];

            p = p - 1;

        } else if ( strcmp(tokens[p1],"*")==0) {

            a[p - 2] = a[p - 2] * a[p - 1];

            p = p - 1;

        } else ifstrcmp(tokens[p1],"/")==0){

                 a[p - 2] = a[p - 2] / a[p - 1];

             p = p - 1;

        }

        p1++;

        

    }

   

    return a[p-1];

}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务