描述
讀入乙個只包含+,-,*,/的非負整數計算表示式,計算該表示式的值.
輸入格式
多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行,即該表...