今天JM要求你完成大量的小学数学题,如果你不能按时正确地完成就会被JM用黑魔法变成咸鱼,然后被czq和flh抓去做成烤全鱼。为了不被吃掉,你必须解决如下问题:
给定 组算术表达式,要求你算出每个表达式的结果。
输入的表达式均满足:
-
表达式以后缀表达式的格式给出,每个词素(运算符或操作数)之间用一个空格隔开;
-
表达式的语法一定是合法的,但是可能会出现除以零的情况;
-
表达式仅包括 +
, -
, *
, /
四种运算符,分别表示加减乘除,其中除法运算需要向下取整;
-
表达式中的操作数为 范围内的整数;
-
表达式的中间结果和最终结果都在 范围内;
-
表达式中的操作数的个数不超过 。
关于后缀表达式:
后缀表达式也被称为逆波兰表达式,其优点是便于计算机程序对其进行计算,缺点是不便于人类阅读。而我们通常习惯使用中缀表达式,它便于阅读,但是编程处理这样的表达式要麻烦得多。
所谓的“后缀”指的是 a b op
的格式,其中 a
, b
是两个操作数, op
是一个二元运算符。相对应地,“中缀”指的是 a op b
的格式,也就是我们通常习惯的写法。
后缀表达式总是按照从左到右的顺序计算,不需要括号即可表示各种计算顺序,因而比中缀表达式要容易处理。例如中缀表达式 a * b + c
和 a * (b + c)
的后缀形式分别为 a b * c +
和 a b c + *
,不需要考虑运算符优先级,无需括号,不存在歧义。
计算后缀表达式时,我们从左到右依次读入词素,每当读到一个二元运算符 op
时,就将最后读到的两个操作数 a
和 b
进行 op
运算,并将结果存下来。
以 a b * c +
为例,我们从左到右依次读入 a
, b
, *
,计算得到 a * b
的结果并将其记为 x
,再依次读入 c
, +
,计算得到 x + c
的结果。
再以 a b c d + / -
为例,我们读到 +
时,计算得到 c + d
的结果并将其记为 x
;再读到 /
,计算得到 b / x
的结果并将其记为 y
;最后计算得到 a - y
的结果。