要實現計算器就需要明白什麼是中綴表示式和什麼實字尾表示式,中綴表示式即運算子在數字之間,字尾表示式就是運算子在數字之後,要實現計算器就需要把中綴表示式轉化為字尾表示式,然後再計算字尾表示式
中綴表示式轉字尾表示式的方法:
1.遇到運算元:直接輸出(新增到字尾表示式中)
2.棧為空時,遇到運算子,直接入棧
3.遇到左括號:將其入棧
4.遇到右括號:執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。
5.遇到其他運算子:加減乘除:彈出所有優先順序大於或者等於該運算子的棧頂元素,然後將該運算子入棧
6.最終將棧中的元素依次出棧,輸出。
中綴表示式轉化為字尾表示式計算機實現
def infix2suffix(infix):
symbol =
list =
cs = infix.encode("utf-8")
sb=bytearray()
for c in cs:
if c == 40:
if len(sb)>0:
sb=bytearray()
elif c ==41:
ch=symbol.pop()
if len(sb)>0:
sb.clear()
while ch != 40:
if len(symbol)<=0:
break
ch=symbol.pop()
elif c == 43 or c == 45:
if len(sb)>0:
sb.clear()
if len(symbol)<=0:
continue
ch=symbol[-1]
while ch != 40:
if len(symbol)<=0:
break
ch=symbol[-1]
elif c == 42 or c ==47:
if len(sb)>0:
sb.clear()
if len(symbol)<=0:
continue
ch=symbol[-1]
while ch != 40 and ch != 43 and ch != 45:
if len(symbol)<=0:
break
ch=symbol[-1]
elif c == 94:
if len(sb)>0:
sb.clear()
if len(symbol)<=0:
continue
ch=symbol[-1]
while ch != 40 & ch != 43 and ch != 45and ch != 42and ch != 47:
if len(symbol)<=0:
break
ch=symbol[-1]
else:
if len(sb)>0:
sb.clear()
while len(symbol)>0:
return list
def byte2str(by):
cb=bytearray()
return cb.decode("utf-8")
計算字尾表示式
def calculatesuffix(list):
num=
for c in list:
if "+"==c:
a=num.pop()
b=num.pop()
elif "-"==c:
a=num.pop()
b=num.pop()
elif "*"==c:
a=num.pop()
b=num.pop()
elif "/"==c:
a=num.pop()
b=num.pop()
elif "^"==c:
a=num.pop()
b=num.pop()
else:
return num.pop()
簡單的實現了加減乘除指數運算,想要更多的運算自己稍微修改就可以了
原始碼位址
簡單計算器
unit unit1 inte ce uses windows,messages,sysutils,variants,classes,graphics,controls,forms,dialogs,stdctrls,buttons,math math是數 算單元 type tform1 class ...
簡單計算器
a 簡單計算器 crawling in process.crawling failed time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description 讀入乙個只包含 的非負整數計算表示...
簡單計算器
問題描述 乙個最簡單的計算器,支援 四種運算。僅需考慮輸入輸出為整數的情況,資料和運算結果不會超過int表示的範圍。輸入 輸入只有一行,共有三個引數,其中第1 2個引數為整數,第3個引數為操作符 輸出 輸出只有一行,乙個整數,為運算結果。然而 1.如果出現除數為0的情況,則輸出 divided by...