題目1019 簡單計算器

2021-06-16 23:46:49 字數 1329 閱讀 3025

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

輸入:測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。

輸出:對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位。

樣例輸入:

1 + 2

4 + 2 * 5 - 7 / 11

0

樣例輸出:

3.00

13.36

**:

#include #include using namespace std;

stackop;

stackin;

char str[220];

int p[5] = ;

void getop(bool &retop, int &retnum, int &i)

if(str[i]==0)

if(str[i]>='0' && str[i]<='9')

retop = false;

else

retnum = 0;

for(;str[i]!=' '&&str[i]!=0;i++)

if(str[i]==' ')

i++;

return;

}int main()

op.push(retnum);}}

if(op.size()==2 && op.top()==0)

break;

}printf("%.2f\n",in.top());

}return 0;

}

1.建立2個棧,乙個用於儲存數字,乙個用於儲存操作符所對應的數字。'+', '-', '*', '/'分別代表1,2,3,4。在輸入的表示式的收尾填充優先順序最低的,分別用數字0,5表示。

2.建立二維陣列,儲存優先順序。收尾優先順序最低,'*','/'優先順序高於'+','-'。 p[a][b]==1表示,a的優先順序大於b,a入棧。若p[a][b]==0,則彈出操作符棧頂元素,從運算元棧彈出2個數,進行計算,再將結果入棧,重複上述步驟。

3.判斷是否為數字。 str[i]>='0' && str[i]<='9'。 將數字字元轉化為數字: str[i] - '0'

題目1019 簡單計算器

題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位...

題目1019 簡單計算器

題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。輸出 對每個測試用例輸出1行,即該表示式的值,精確到小數點後2位...

九度 題目1019 簡單計算器

時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 8387 解決 3065 題目描述 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。輸入 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束...