java解析字串表示式 逆波蘭表示式的計算

2021-08-29 22:43:47 字數 1183 閱讀 3977

上回合我們講了如何將中綴表示式轉換成逆波蘭表示式,這回合我們講一講如何計算逆波蘭表示式。結合這一回合和上一回合,我們將能夠實現這樣乙個功能:計算乙個中綴表示式的結果!話不多說,走起來!

讀入乙個字串形式的四則運算表示式,輸出對應的計算結果。如讀入的是「6 * ( 5 + ( 2 + 3) * 8 + 3)」,那麼解析後的輸出結果應為288。

思路:一般的計算過程是這樣的,首先計算優先順序最高的小括號裡面的內容,即「( 5 + ( 2 + 3) * 8 + 3)」,

將「2 + 3」的計算結果並存為a,接著用計算「a*8」,並存為b

計算「5+b+3」,結果存為c

最後計算「6*c」,計算完畢

我們可以將這種操作順序書寫如下:

6 5 2 3 + 8 * + 3 + *

這個記法就是逆波蘭(reverse polish)表示式,其求值過程恰好就是上面所描述的過程。逆波蘭表示式又叫做字尾(postfix)表示式。在通常的表示式中,運算子總是置於與之相關的兩個運算物件之間,所以,這種表示法也稱為中綴表示。波蘭邏輯學家 j.lukasiewicz於2023年提出了另一種表示表示式的方法。按此方法,每一運算子都置於其運算物件之後,故稱為字尾表示。

} //棧中的最後乙個元素就是計算後的結果

int total=integer.parseint(stack.pop());

return total;

} public static void main(string args)

}計算乙個字尾表示式話費的時間是o(n),該演算法的計算非常簡單,同時不需要知道任何的計算優先順序。

到此,我們已經能夠實現將乙個中綴表示式轉換成字尾表示式(逆波蘭表示式),並計算出結果。

參考文章:

Java解析字串表示式 逆波蘭表示式的計算

問題來由 讀入乙個字串形式的四則運算表示式,輸出對應的計算結果。如讀入的是 6 5 2 3 8 3 那麼解析後的輸出結果應為288。思路 一般的計算過程是這樣的,首先計算優先順序最高的小括號裡面的內容,即 5 2 3 8 3 將 2 3 的計算結果並存為a,接著用計算 a 8 並存為b 計算 5 b...

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...