P1449 字尾表示式 STL棧 字尾表示式

2022-09-12 03:21:12 字數 1125 閱讀 5028

所謂字尾表示式是指這樣的乙個表示式:式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行(不用考慮運算子的優先順序)。

如:3*(5–2)+7對應的字尾表示式為:3.5.2.-*7.+@。』@』為表示式的結束符號。『.』為運算元的結束符號。

輸入:字尾表示式

輸出:表示式的值

輸入

3.5.2.-*7.+@
輸出

16
字串長度,1000內。

計算字尾表示式需要利用棧,這裡我們使用stl中的stack。

計算機計算字尾表示式的過程如下----字尾表示式的計算機求值:

從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算(次棧頂元素 op 棧頂元素),並將結果入棧;重複上述過程直到表示式最右端,最後運算得出的值即為表示式的結果。

例如字尾表示式「34+5*6-」:

(1) 從左至右掃瞄,將3和4壓入堆疊;

(2) 遇到+運算子,因此彈出4和3(4為棧頂元素,3為次頂元素,注意與字首表示式做比較),計算出3+4的值,得7,再將7入棧;

(3) 將5入棧;

(4) 接下來是×運算子,因此彈出5和7,計算出7*5=35,將35入棧;

(5) 將6入棧;

(6) 最後是-運算子,計算出35-6的值,即29,由此得出最終結果。

不過在這道題裡面我們需要注意的是,這裡面的數字會有多位數。

#include#include#includeusing namespace std;

int main()

mystack.push(num);

} else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/')

else if(s[i] == '-')

else if (s[i] == '*')

else if (s[i] == '/')

}} cout << mystack.top() << endl;

return 0;

}

P1449 字尾表示式

所謂字尾表示式是指這樣的乙個表示式 式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行 不用考慮運算子的優先順序 如 3 5 2 7 對應的字尾表示式為 3 5 2 7 為表示式的結束符號。為運算元的結束符號。輸入格式 輸入 字尾表示式 輸出格式 輸出...

P1449 字尾表示式

所謂字尾表示式是指這樣的乙個表示式 式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行 不用考慮運算子的優先順序 如 3 5 2 7對應的字尾表示式為 3 5 2 7 為表示式的結束符號。為運算元的結束符號。輸入格式 輸入 字尾表示式 輸出格式 輸出 ...

P1449 字尾表示式

所謂字尾表示式是指這樣的乙個表示式 式中不再引用括號,運算符號放在兩個運算物件之後,所有計算按運算符號出現的順序,嚴格地由左而右新進行 不用考慮運算子的優先順序 如 3 5 2 7對應的字尾表示式為 3 5 2 7 為表示式的結束符號。為運算元的結束符號。輸入 字尾表示式 輸出 表示式的值 輸入 1...