遞迴之逆波蘭表示式(字尾表示式)

2021-08-19 11:25:07 字數 1131 閱讀 9102

描述不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,不再考慮運算子的優先規則,如:(2 + 1) * 3 , 即2 1 + 3 *。這樣的表示式稱為字尾表示式,也叫逆波蘭表示式。它是為了方便在計算機中進行表示式求值而出現的。

給出乙個僅由整數 、+、-、*、/等組成的字尾表示式,符號之間用空格分開,計算它的值。/ 表示整除。

輸入第1行:1個字串,即字尾表示式輸出第1行:1個整數,表示運算結果。樣例輸入

2 1 + 3 *
樣例輸出
9

解題思路1遞迴:請參考我的《遞迴之波蘭表示式》的解法,方法非常的類似,但是這道題的區別在於不用交換減數(除數)和被減數(被除數)的位置,因為逆波蘭表示式是倒著遍歷的,先找到的數字是減數,傳入int f1(int a,char b,int c)中的c位置,之後找到的的是被減數,存放的位置是a,所以不用交換。

解題思路2

棧思想:因為棧有後進先出的特點,所以當我們輸入乙個運算子時,在這個運算子之前肯定是有兩個數字的,對這兩個數字出棧,運算出結果,把結果入棧。

參考程式1(遞迴)

#include#include#include#includeusing namespace std;

string a[2000];

int i,t;

int f1(int a,char b,int c)

}int f2()

t--;

return f1(f2(),a[i][0],f2());

}int main()

參考程式2(棧)

#include#include#includeusing namespace std;

int main()

else

case'-':

case'*':

case'/':

}} }

cout

}

逆波蘭表示式 字尾表示式

字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。比如 3 4 5 6中綴表示式就是常見的運算表示式,如 3 4 5 6字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後,比如 3 4 5 6 人類最熟悉的一種表示式1 2,1 2 3,3 42 4等都是中綴表示法。對於人們...

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...

逆波蘭表示式 中綴表示式 字尾表示式

1 我們這裡要實現的是 將中綴表示式轉換成字尾表示式,然後再計算最終結果,參考部落格。具體轉化演算法如下 中綴表示式a b c d e f g,其轉換成字尾表示式則為abc de f g 轉換過程需要用到棧,具體過程如下 1 如果遇到運算元,我們就直接將其輸出。2 如果遇到操作符,則我們將其放入到棧...