簡單計算器(棧結構)

2021-09-26 09:14:57 字數 1410 閱讀 2438

描述

讀入乙個只包含+,-,*,/的非負整數計算表示式,計算該表示式的值.

輸入格式

多case,包含若干個測試用例,每個用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應結果不要輸出.

輸出格式

每個測試用例輸出一行,即該表示式的值,精確到小數點後2位.

樣例30 / 90 - 26 + 97 - 5- 6 - 13 / 88 * 6 + 51 / 29 + 79 *87 + 57 * 92

0樣例輸出

12178.21

分析:題目給出的是中綴表示式,我們先將其轉化成字尾表示式,然後計算字尾表示式

設立操作符棧用來臨時存放操作符,設立乙個佇列或陣列,用來存放字尾表示式,從左至右掃瞄中綴表示式

1.遇到運算元就加入字尾表示式(佇列)中,

2.遇到操作符op就將其與棧頂操作符top的優先順序比較,如果op>top則op入棧,如果op<=top則不斷彈出top直到top優先順序從左到右掃瞄字尾表示式,遇到運算元就入棧,遇到操作符op就彈出兩個運算元a, b並且計算結果b op a入棧,直到最後讀完字尾表示式這時棧中的數就是運算結果

#include

#include

#include

#include

using namespace std;

struct node

;string str;

//全域性字串

stack s;

//操作符棧

queue q;

//字尾表示式序列

map<

char

,int

> op;

//優先順序對映

void

change()

//中綴轉字尾

else

temp.op=str[i++];

s.push

(temp)

;//壓入操作符棧}}

while

(!s.

empty()

)}double

cal(

)//計算字尾表示式

}return s.

top(

).num;

}int

main()

while

(!s.

empty()

) s.

pop();

while

(!q.

empty()

) q.

pop();

change()

;printf

("%.2f\n"

,cal()

);//計算字尾表示式

}return0;

}

簡單計算器(棧)

開始複習棧,這個題感覺見得很多,各種各樣的,但是核心思路就是把中綴表示式轉化為字尾表示式,我們老師說這個東西也叫作中序二叉樹轉後序二叉樹。大概實現的方式就是用棧來實現 最開始感覺沒啥思路,因為之前一直都不會這種題 論為什麼我這麼菜,之前沒有好好學過棧,知道了stl中有stack後還是方便很多 第一次...

簡單計算器 STL 棧

讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例輸出1行,即該表示式的值,精確到小數點後...

F 簡單計算器 棧

description 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例輸出1行,即該表...