傳統的算術表示式是由運算元(又叫運算物件或運算量)和運算子以及改變運算次序的圓括號連線而成的式子。 其運算規則如下:
(1) 先計算括號內,後計算括號外;
(2) 在無括號或同層括號內,先進行乘除運算,後進行加減運算,即乘除運算的優先順序高於加減運算的優先順序;
(3) 同一優先順序運算,從左向右依次進行。
在這種表示式的計算過程中,既要考慮括號的作用,又要考慮運算子的優先順序,還要考慮運算子出現的先後次序。
波蘭科學家盧卡謝維奇(lukasiewicz)提出了算術表示式的另一種表示,即字尾表示,又稱逆波蘭式,其定義是把運算子放在兩個運算物件的後面。在字尾表示式中,不存在括號,也不存在優先順序的差別,計算過程完全按照運算子出現的先後次序進行,整個計算過程僅需一遍掃瞄便可完成。
例如:
3/5+6的逆波蘭表示式為3 5 / 6 +
2*(3+4)的逆波蘭表示式為2 3 4 + *
輸入:乙個只包含加、減、乘、除和數字的逆波蘭表示式
輸出:該表示式的值
說明:題目中涉及的資料全部為整型。
輸入1
23+
5*
輸出1
25
輸入2
1694
3+*-
輸出2
-
47
#include
#include
char expression[
1000];
struct stackstack;
intkind
(char ch)
intmain()
i=j;
stack.num[stack.point]
=ans;
stack.point++
;continue;}
elseif(
kind
(expression[i])==
2)elseif(
kind
(expression[i])==
3)i=j;
stack.num[stack.point]
=-ans;
stack.point++
;continue;}
stack.num[stack.point-2]
=stack.num[stack.point-2]
-stack.num[stack.point-1]
; stack.point--;}
elseif(
kind
(expression[i])==
4)elseif(
kind
(expression[i])==
5)}printf
("%d\n"
,stack.num[0]
);return0;
}
算術表示式求解背景 逆波蘭表示式
逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括 四個。輸入 輸入為一行,其中運算子和運算數之...
逆波蘭演算法求解算術表示式
牛客題目 請寫乙個整數計算器,支援加減乘三種運算和括號。題目給出的算術表示式主要包括三部分 運算元 括號 運算子 一般的算術表示式都是中綴表示式,不易於程式設計計算。所以我們可以利用逆波蘭演算法將算術表示式的中綴形式轉為更易於計算的字尾形式。轉換為字尾表示式的過程需要借助兩個額外空間,棧s和陣列列表...
波蘭表示式 逆波蘭表示式
中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...