題目描述
我們人類習慣於書寫「中綴式」,如3 + 5 * 2
,其值為13
。 (p.s. 為什麼人類習慣中綴式呢?是因為中綴式比字尾式好用麼?)
而計算機更加習慣「字尾式」(也叫「逆波蘭式」,reverse polish notation)。上述中綴式對應的字尾式是:3 5 2 * +
現在,請對輸入的字尾式進行求值。
輸入格式:
在一行中輸入乙個字尾式,運算數和運算子之間用空格分隔,運算數長度不超過6位,運算子僅有+ - * / 四種。
輸出格式:
在一行中輸出字尾式的值,保留一位小數。
輸入樣例:
3 5.4 2.2 * +
輸出樣例:
14.9
字尾表示式求值,只需要從左到右依次掃瞄然後求值。
遇到運算元放入棧中。
遇到操作符,彈出棧頂兩個運算元,注意做除法和減法的時候,第二個彈出來的數才是被除數和被減數。
坑點:運算元有負數,所以不能直接判斷字串首位是不是+-*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
intmain()
}if(c ==
'\n'
)break;}
printf
("%.1f\n"
, st.
top())
;return0;
}
exp=
input()
.split(
)ls=
list()
defcal
(a,b,i)
:if i==
"+":
return a+b
elif i==
"-":
return a-b
elif i==
"*":
return a*b
else
:return a/b
for i in exp:
if i in
"+-*/"
: a=ls.pop(
) b=ls.pop())
else
:float
(i))
print(""
.format
(float
(ls.pop())
))
7 11 字尾式求值 25 分
我們人類習慣於書寫 中綴式 如 3 5 2 其值為13。p.s.為什麼人類習慣中綴式呢?是因為中綴式比字尾式好用麼?而計算機更加習慣 字尾式 也叫 逆波蘭式 reverse polish notation 上述中綴式對應的字尾式是 3 5 2 現在,請對輸入的字尾式進行求值。輸入格式 在一行中輸入乙...
字尾式求值
time limit 1000ms memory limit 65536k 有疑問?點這裡 對於乙個基於二元運算子的字尾表示式 基本運算元都是一位正整數 求其代表的算術表示式的值。輸入乙個算術表示式的字尾式字串,以 作為結束標誌。求該字尾式所對應的算術表示式的值,並輸出之。59 684 3 57 基...
字尾式求值
希望看到部落格的同學能夠告訴我為什麼乙個200的數組裝得下的資料,乙個棧裝不下 我們人類習慣於書寫 中綴式 如 3 5 2 其值為13。p.s.為什麼人類習慣中綴式呢?是因為中綴式比字尾式好用麼?而計算機更加習慣 字尾式 也叫 逆波蘭式 reverse polish notation 上述中綴式對應...