簡單計算器

2021-08-31 01:23:12 字數 2109 閱讀 1232

要實現計算器就需要明白什麼是中綴表示式和什麼實字尾表示式,中綴表示式即運算子在數字之間,字尾表示式就是運算子在數字之後,要實現計算器就需要把中綴表示式轉化為字尾表示式,然後再計算字尾表示式

中綴表示式轉字尾表示式的方法:

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...