四則運算
序號:#16
難度:有挑戰
時間限制:1000ms
記憶體限制:10m
描述
實現乙個演算法,可以進行任意非負整數的加減乘除組合四則運算。
請注意運算子的優先順序。
輸入
請輸入一行算式,使用空格分隔數字與運算子。
數字為任意非負整數,運算子為+ - * /,不考慮括號。
輸出
輸出算式的運算結果。如果是小數,請向下取整(包含中間步驟結果)。
如果出現「除0異常」,輸出err。
樣例
3 + 5
12 + 45 / 9
1 / 2
1 / 0
12 + 34 * 56 - 78
輸出樣例817
0err
1838
小提示
可以使用棧來解決此類問題。
思路:
可以先將輸入的表示式通過棧轉換為字尾表示式。而字尾表示式可以再通過棧來計算出最終的值。
我用佇列存放輸入的中綴表示式和轉換後的字尾表示式,轉換策略為:
讀取中綴表示式佇列,遇到數字,直接輸出。
遇到運算子,且棧為空,入棧。
遇到運算子,且棧非空,與棧頂的元素比較,若優先順序大於棧頂元素,則入棧,否則輸出棧頂元素到字尾表示式,pop後繼續與棧頂元素比較,直到該運算子優先順序大於棧頂元素或棧為空時,入棧。
若中綴表示式隊列為空,直接將棧中剩餘元素依次輸出到字尾表示式。
字尾表示式計算時也通過棧來實現,步驟為:
讀取字尾表示式佇列,遇到數字,入棧。
遇到運算子,將棧最上邊的兩個元素彈出,並計算它們與該運算子運算的值,並將這個值入棧。
當字尾表示式隊列為空時,棧中的元素為最終結果。
**
#include#include#include#include#includeusing namespace std;
int main()
queueexpre; //expre用來存放字尾表示式
stacksta;
while(!ex.empty())
else if(sta.empty())
else if((sta.top()=="+"||sta.top()=="-")&&(ex.front()=="*"||ex.front()=="/"))
else if(ex.front()=="*"||ex.front()=="/")
while(!sta.empty()&&sta.top()!="+"&&sta.top()!="-");
sta.push(ex.front());
ex.pop();
} else if(ex.front()=="+"||ex.front()=="-")
while(!sta.empty());
sta.push(ex.front());
ex.pop();
} }while(!sta.empty())
while(!expre.empty())
else
a=b/a;
}ss<>s;
sta.push(s);
expre.pop();
} } cout
}
oj1037 四則運算
給你乙個簡單的四則運算表示式,包含兩個實數和乙個運算子,請程式設計計算出結果 表示式的格式為 s1 op s2,s1和s2是兩個實數,op表示的是運算子 也可能是其他字元 如果運算子合法,輸出表示式的值 若運算子不合法或進行除法運算時除數是0,則輸出 wrong input 最後結果小數點後保留兩位...
OJ1037 四則運算
題目描述 給你乙個簡單的四則運算表示式,包含兩個實數和乙個運算子,請程式設計計算出結果 輸入 表示式的格式為 s1 op s2,s1和s2是兩個實數,op表示的是運算子 也可能是其他字元 輸出 如果運算子合法,輸出表示式的值 若運算子不合法或進行除法運算時除數是0,則輸出 wrong input 最...
python四則運算程式 四則運算(Python)
四則運算程式 一 資訊 二.題目要求 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 除了整數以外,還要支援真分數的四則運算,例如 1 6 1 8 7 24 程式要求能處理使用者的輸入,判斷對錯,累積分數 程式支援可以由使用者自行選擇加 減 乘 除運算 三 import random...