歡迎加入我的 Discord 群組與我討論程式相關的問題!

Posted on 

 by 

 in 

ZeroJudge f698. 後序運算式

評分:1.5 分,滿分為 5。

題目連結

題意

給一個後序運算式,要你算出答案

後序:運算元 運算元 運算子
也就是運算子出現的位置不同,所以中序的 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';
}

發表迴響

Blog at WordPress.com.

%d 位部落客按了讚: