讀入乙個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值。
測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。
對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。
30 / 90 - 26 + 97 - 5 - 6 - 13 / 88 * 6 + 51 / 29 + 79 * 87 + 57 * 92
0
12178.21
問題難點:字元資料的處理,乘除和加減優先順序的處理。
codeup和pat的題目差別在於,pat的是單點輸入進行測試的,而codeup是多點輸入進行測試的。如果是單點測試,取數值就非常方便了,直接用cin>>str,挨個把字元取出來,並按照間隔的方式分別判斷為數字還是運算子即可。由於是多點測試,那麼一行資料要一次性讀入進來,然後對這個字串進行字元處理。
我這邊的思路是:先將一行字串讀入,然後將數字與字元分別存入2個不同的陣列中。然後先進行乘除運算,最後再進行加減運算。
《演算法筆記》這本書關於這道題的思路是用棧的方式處理。我個人認為,用這種方式有點複雜,如果用於學習棧處理數學公式,還是可以學習一下的。
這邊的**給出我自己寫的。
**:
#include #include #include #include using namespace std;
void calculate(string str)
else if (str[i] != ' ')
}num[step_n] = n;//最後乙個數字存入陣列中
st[0] = num[0];
step_n = 0;
for (int i = 0; i < step_c; i++)
else
}n = st[0];
for (int i = 0; i < step_n; i++)//step_n為st陣列中數字的個數
printf("%.2f\n", n);
}int main()
return 0;
}
codeup1918簡單計算器
讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。30 90 26 9...
codeup 1918 簡單計算器
問題 a 簡單計算器 時間限制 1 sec 記憶體限制 32 mb 提交 2132 解決 877 提交 狀態 討論版 命題人 外部匯入 題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空...
codeup 1918 簡單計算器
codeup 1918 include include include include include include using namespace std struct node string srt stack s 操作符棧 queue q 字尾表示式序列 map char int op vo...