問題
輸入字符串 (10+(4*5+2)-(9+6/2))/2,輸出計算結果 10。僅包含 + - * / 運算符與括號。
經典算法:兩棧法 / 逆波蘭表達式 (RPN)
- 中綴轉后綴(Shunting-yard 算法):
- 掃描中綴表達式,數字直接進輸出隊列。
- 運算符根據優先級與棧頂運算符比較,決定入棧或彈出至輸出。
- 左括號入棧,遇右括號彈出至左括號。
- 后綴表達式求值:
- 掃描后綴表達式,數字入棧。
- 遇運算符彈出兩個操作數計算,結果入棧。
- 最終棧頂元素即為結果。
參考資源
擴展建議
- 支持一元負號、次方運算、函數調用。
- 使用
double 類型避免整數除法截斷。
- 異常處理:除零、括號不匹配、非法字符。