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