這題沒啥好說的。就是爛模擬,我的是這樣想:
每次讀三個數和兩個運算子,如果第乙個運算子是「+」或者「-」,後面的是「*」或者「/」那麼就先將後面處理,之後將處理之後的值和還沒用的數字再放回去,第乙個運算子也同樣放回。
其他情況便都是先算前面之後把處理之後的值和還沒用的數字放回,將第二個運算子同樣放回。(可以想想為啥)
一開始想用棧的但是用著用著發現太麻煩就換成雙端佇列了hhh有興趣的可以去學一下,挺簡單的。
注意:1.因為是字元數字讀入,要注意數字不止一位,這個樣例跑一下就知道了
2.題目要求精度較高需要用double,float會爆
1 #include 2view code#define maxn 200 + 10
3using
namespace
std;
4int
main()523
}24double
temp;
25while (q2.size() > 2)26
43else
if (oper2 == '/'
)4452}
53else
546061}
62double
ans;
63char oper =q1.front(); q1.pop_front();
64double num1 =q2.front(); q2.pop_front();
65double num2 =q2.front(); q2.pop_front();
66//
printf("%.2lf\n", num1);printf("%.2lf\n", num2);
67if (oper == '
+') ans = num1 +num2;
68else
if (oper == '
-') ans = num1 -num2;
69else
if (oper == '
*') ans = num1 *num2;
70else ans = num1 /num2;
71 printf("
%.2lf\n
", ans);
7273}74
return0;
75 }
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...
HDU1237 簡單計算器
problem description 讀入乙個只包含 的非負整數計算表示式,計算該表示式的值。input 測試輸入包含若干測試用例,每個測試用例佔一行,每行不超過200個字元,整數和運算子之間用乙個空格分隔。沒有非法表示式。當一行中只有0時輸入結束,相應的結果不要輸出。output 對每個測試用例...