nyoj 35 表示式求值 棧的應用

2021-06-22 09:25:12 字數 1087 閱讀 6045

幾乎刷屏了

描述acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a+b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。

比如輸入:「1+2/4=」,程式就輸出1.50(結果保留兩位小數) 輸入

第一行輸入乙個整數n,共有n組測試資料(n<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。

資料保證除數不會為0

輸出每組都輸出該組表示式的運算結果,輸出結果保留兩位小數。

樣例輸入

2

1.000+2/4=

((1+2)*5+1)/4=

樣例輸出

1.50

4.00

/*

優先順序順序:右括號》 乘/除 > 加減 > 左括號

用兩個棧, 乙個儲存字元, 另乙個儲存double型資料(用字串)

'』是出棧計算的標誌 『=』是判斷左右括號的標誌

*/

#include#include#include#include#includeusing namespace std;

char first( char q, char w )

if( q == '*'||q=='/' )

if( q == '('||q=='=' ) }

double operate( double a, double b, char c ) //運算 a是第乙個出棧的 

int main()

if( flag == 1 )

char c;

double a1, a2;

switch( first( str.top(), a[i] ) )

}printf( "%.2lf\n", dou.top() );

}return 0;

}

NYOJ 35 表示式求值(棧)

表示式求值 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩...

NYOJ35 表示式求值

搞了差不多2天,原來乙個是sstream的用法困惑好久,需要對陣列清零 include include include include include include includeusing namespace std char mid 1008 post 1008 char compare ch...

nyoj 35 表示式求值

描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入 第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只...