我们人类习惯于书写“中缀式”,如 3 + 5 * 2
,其值为13
。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)
而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是: 3 5 2 * +
现在,请对输入的后缀式进行求值。
输入格式:
在一行中输入一个后缀式,运算数
和运算符
之间用空格分隔,运算数长度不超过6
位,运算符仅有+ - * /
四种。
输出格式:
在一行中输出后缀式的值,保留一位小数。
输入样例:
1 | 3 5.4 2.2 * + |
输出样例:
1 | 14.9 |
思路
每一个运算符要计算他前面紧按着他的两个操作数,这个操作数可以是表达式的值。
可以用一个stack来存储运算数,每遇到一个运算符,就从栈顶拿来两个运算数(注意顺序,最上面的应该是操作数2,比如ab-,b是操作数2,转换成中缀就是a-b),然后再将计算结果压入栈顶。
最后将栈里唯一元素输出即可。
代码
1 |
|