CodeUp1918 簡單計算器

2021-10-03 03:10:08 字數 1101 閱讀 8924

讀入乙個只包含 +, -, *, / 的非負整數計算表示式,計算該表示式的值。

測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過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...