description
讀入乙個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值
input
測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出
output
對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位
sample input
1 + 2
4 + 2 * 5 - 7 / 11
0sample output
3.00
13.36
solution
模擬四則運算過程,對於整個輸入的串,遇到數字則提取出來進數字棧,遇到加減運算則進運算子棧,遇到乘除運算則從數字棧中拿出棧頂元素與運算子之後提取出的整數進行運算並將結果進數字棧,這樣當列舉完整個串的元素後,我們就得到了乙個只有加減運算的表示式,但因為這個表示式在棧中的順序是反的,所以要再開兩個棧來將這個表示式反序,之後就每次從數字棧棧頂取出兩元素,從運算子棧中取出乙個運算子,將運算結果壓進數字棧中,最後數字棧剩下的乙個元素即為表示式的最終結果
code
#include
#include
#include
#include
using
namespace
std;
int main()
//將結果進棧
if(s[i]=='*')
num.push(x*y);
else
num.push(x/y);
i=j;
}else
if(s[i]=='+'||s[i]=='-')//加減法,直接進棧
op.push(s[i]);
else
//數字則提取出來進棧
i=j;
num.push(y);}}
//因為進棧之後出棧順序與運算順序相反,所以要將棧內元素反轉
stack
nnum;
stack
oop;
while(!num.empty())
while(!op.empty())
while(!nnum.empty()&&!oop.empty())
printf("%.2lf\n",nnum.top());
}return
0;}
簡單計算器 HDU 1237 (模擬)
讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例輸出1行,即該表示式的值,精確到小數點後...
hdu1237 簡單計算器
模擬棧運算,其實遞迴也可以,不過我夠嗆能寫的出來 其實老早就看過表示式求值的問題,只不過一直沒有敲過,今天敲了一下,發現還是有不少問題的 code include include include using namespace std bool check char,char void solve ...
hdu 1237 簡單計算器
模擬棧。設兩個陣列,乙個裝運算元,乙個裝操作符。根據優先順序,先乘除,後加減。include include include include char s 210 op 200 s1 200 double a 200 int char num char s1,int n 字串轉化成int型數 ret...