簡單計算機 逆波蘭表示式

2022-08-05 10:12:18 字數 1225 閱讀 2663

逆波蘭數:逆波蘭數由兩部分組成(運算元,操作符)——是波蘭表示式的一種,即操作符在運算元的後面。

形式:a+b*c-d = abc*d-;

(a+b)*c-d = ab+c*d-;

既然我們知道了,字尾表示式那我們表示式是唯一的嗎?我們來看一組資料:

例如:(a+b)*c-d 和 c*(a+b)-d;

很顯然第二個的表示式為:c*ab+d-;雖然對最後的結果無影響,但我們需要知道逆波蘭的多樣性。

注意事項:

1、如果出現1+23 = 123+,該如何判斷它的數值呢?

可以利用分割符來進行很好的輔助性理解,例如1+23 = 1#23#+,這樣可以完美的解決此問題。

2、存在括號的時候該如何處理?

其一:是『(』直接壓入,『)』時,將兩者之間的運算子彈出,壓入字尾表示式。

其二:遇到『(』開闢乙個新的運算子棧,『)』時,當前棧內運算子彈出,壓入字尾表示式。

演算法:1、中綴表示式——逆波蘭表示式的轉變。

2、逆波蘭求值。

核心**:

1、中綴表示式——逆波蘭表示式的轉變。

bool is_char(char c)//

判斷是否為操作符

void change()//

表示式的轉化

sconed.push_back('#

');//

分隔符if (!one[j].empty())//

判斷是否為空

if (one[j].top() == '

*' || one[j].top() == '

/')//

高階運算,直接取出,壓入數值鍊錶

}else

if (c == ')'

)

else

j++;//

新的字元棧

} dum(j);

}void dum(int j)//

多餘的運算子逐個壓入數值鍊錶

}

view code

2、逆波蘭求值。

void do_it(std::stack &mc)

else

mc.push(a /b);

break

;

default://

獲得數值

mc.push(sum);}}

}}

}

do_it

3、github原始碼;

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 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 ...

逆波蘭表示式簡單介紹

逆波蘭表示式又叫做字尾表示式。在通常的表示式中,二元運算子總是置於與之相關的兩個運算物件之間,所以,這種表示法也稱為中綴表示。波蘭邏輯學家j.lukasiewicz於1929年提出了另一種表示表示式的方法。按此方法,每一運算子都置於其運算物件之後,故稱為字尾表示。逆波蘭表示式 逆波蘭表示式,它的語法...