首页 > 试题广场 >

不喜欢括号

[编程题]不喜欢括号
  • 热度指数:822 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
NowCoder从小就喜欢数学,喜欢在笔记里记录很多表达式。它觉得现在的表达式写法很麻烦,为了提高运算符优先级,不得不添加很多括号,不小心漏了一个右括号的话差之毫厘谬之千里。
因此他改用前缀表达式,例如`(2 + 3) * 4`写成`* + 2 3 4`,这样就能避免使用括号了。这样的表达式书写简单,但计算却不够直观。请你写一个程序帮他计算这些前缀表达式吧。

输入描述:
输入包含多组数据,每组数据包含两行。

第一行为正整数n(3≤n≤50),紧接着第二行包含n个由数值和运算符组成的列表。

“+-*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。


输出描述:
对应每一组数据,输出它们的运算结果。
示例1

输入

3
+ 2 3
5
* + 2 2 3
5
* 2 + 2 3

输出

5
12
10

python解法,使用递归来做的:

从左到右读,如果遇到加减乘除符号,向后看两个,如果这两个数都是整数,那么直接开始计算。计算完后,进行下一个递归。

def calc(arr):
    for i,v in enumerate(arr):
        if v in ["+","-","*","/"]:
            if arr[i+1].isnumeric() and arr[i+2].isnumeric():
                return calc(arr[:i]+[str(int(eval(arr[i+1]+v+arr[i+2])))]+arr[i+3:])
    return arr[0]


while True:
    try:
        a,b=input(),input().split()
        print(calc(b))
    except:
        break
发表于 2017-10-13 08:55:08 回复(1)