題意
給一個後序運算式,要你算出答案
後序:運算元 運算元 運算子
也就是運算子出現的位置不同,所以中序的 3 + 2 就會變成後序的 3 2 +
在計算時,我們要從左往右找到連續的 運算元 運算元 運算子 結構開始運算。
例如
1 2 3 * +
我們會先從左往右找到連續的 2 3 * ,並且把他乘起來變成 6 ,再把原本的 2 3 * 用 6 代替
因此,運算式會變成 1 6 + ,是連續的三個 運算元 運算元 運算子 結構,所以計算出來是 7
解題方法
用迴圈跑過去,遇到一個運算子就把 stack 最上面兩個數字利用現在那個運算子合併起來,合併完再放入 stack 中。
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
stack <int> st;
while(cin >> s) {
if(s == "+" || s == "-" || s == "/" || s == "*") {
signed int sc = st.top(); st.pop();
signed int ft = st.top(); st.pop();
if(s == "+") st.push(ft+sc);
if(s == "-") st.push(ft-sc);
if(s == "*") st.push(ft*sc);
if(s == "/") st.push(ft/sc);
} else {
st.push(stoi(s));
}
}
cout << st.top() << '\n';
}
發表迴響