任務描述
本關任務:熟練掌握STL模板庫中棧stack的基本操作,並利用棧實現后綴表達式求解。
相關知識
為了完成本關任務,你需要掌握:1.后綴表達式求解。
后綴表達式求解 算法思想:從左至右掃描表達式,遇到數字時,將數字壓入棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 - 運算符 - 棧頂元素),並將結果入棧;重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果。
例如后綴表達式2 1 3 + * 4 -
:
編程要求
本關的編程任務是補全右側代碼片段main中Begin至End中間的代碼,具體要求如下:
讀取后綴表達式,並基於棧的插入、刪除等基本操作實現后綴表達式求解,表達式中所有的操作數為單一的數字:0~9,運算符僅包含:+ - * ( )。
輸入輸出說明
本任務的輸入為單個測試用例,輸入長度不超過100,且操作數僅為0~9
之間的整數,操作符只包含“+-*/
”等算數運算符的中綴表達式,輸出為該中綴表達式的計算結果。
以下是平台的測試樣例:
測試輸入:123+4*+5- 預期輸出:16
輸入格式:后綴表達式 輸出格式:運算結果,末尾換行\n
#include<iostream> #include<stack> #include<string.h> #include<string> using namespace std; int main() { string s; cin>>s; stack<int>st; for(int i=0;i<s.size();i++){ if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/'){ int num1=st.top(); st.pop(); int num2=st.top(); st.pop(); if(s[i]=='+')st.push(num2+num1); if(s[i]=='-')st.push(num2-num1); if(s[i]=='*')st.push(num2*num1); if(s[i]=='/')st.push(num2/num1); }else{ char ch=s[i]; string s2; char s1[2]={ch,0}; s2=s1; st.push(stoi(s2)); } } cout<<st.top(); }