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