逆波兰表达式
* * * *
拉格朗日计划
* * * *
逆波兰表达式

逆波兰表达式是一种运算符后置的表达式写法,例如$3\;+\;2$在逆波兰表达式中写作$3\;2\;+$。

本题的每一条输入数据都是一个有效的逆波兰表达式,式中操作符和操作数之间以一个空格隔开,操作数是0到32767之间的整数,操作符是四则运算“+-*/”。

对每一条输入数据,计算该表达式的值,并将结果单独打印一行。

每条输入数据的结果都是0到32767之间的整数,且涉及除法时保证能除尽。

本题难度:



解答

用一个栈处理表达式,用eval函数直接计算二元运算的值以避免分支判断,比较麻烦的是减法和除法不满足交换律,所以只能先弹出栈顶元素再作处理。

最终代码有五行。

代码长度:138字节 vs. 全站第一:109字节。

import sys
for a in sys.argv[1:]:
  s=[0]
  for i in a.split():a=s.pop();s+=[str(int(eval(s.pop()+i+a)))]if i in"+-*/"else[a,i]
  print(s[1])