HDU 1237 簡單計算器

2021-10-10 09:13:50 字數 1223 閱讀 9787

傳送門

這道題是一道棧的運用

中文題目,我就不描述啦~

按照計算法則,是先乘除,後加減。(但實際上計算器是實時計算的)

因為是合法的表示式,運算子和運算元之間只有乙個空格。所以碰到乙個運算子的話那麼前後就是運算元。碰到加號將下乙個數入棧,碰到減號將下乙個數變成他的相反數入棧,碰到乘號和除號就彈出乙個數與操作符的下乙個數進行運算即可。

因為我是getline讀入,所以注意乙個非負整數不止一位。

**部分:

#include

using

namespace std;

string str;

stack<

double

> s;

double ans;

intmain()

getline

(cin, str)

;int n = str.

size()

;if(str[0]

=='0'

&& n ==1)

for(

int i =

0; i < n; i++)if

(str[i]

=='+'

|| str[i]

=='-'

|| str[i]

=='*'

|| str[i]

=='/'

) s.

push

(temp);}

else

if(str[i]

=='-'

) s.

push

(-temp);}

else

if(str[i]

=='*'

)double t2 = temp;

double t = t1 * t2;

s.push

(t);

}else

double t2 = temp;

double t =

1.0* t1 / t2;

s.push

(t);}}

else

s.push

(temp);}

}while

(!s.

empty()

) printf (

"%.2f\n"

, ans);}

return0;

}

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 對每個測試用例...