HDU 1237 簡單計算器 棧

2022-08-09 01:51:19 字數 1397 閱讀 4965

題意:給你乙個只有+ - * / 的計算表示式 , 要你求出結果.

坑爹:一開始我只是以為只要在輸入的時候遇到*或者/就彈出來進行計算,然後在到最後計算 + 和  - 的時候直接彈出

乙個乙個計算,最後才發現原來在最後彈出來計算的時候要全部反過來,不能直接彈出就計算然後壓入.

解法:遇到 * 或者 / 就彈出兩個進行計算, 然後壓入結果 , 到最後的時候把棧裡的數字反過來,也就是用乙個陣列從0 -  n

開始存每乙個出棧的數字 , 符號棧也是相同的操作 , 然後就可以進行正常的按順序這樣做 + 和 - 操作了.

view code

1 #include2 #include3

using

namespace

std;45

6int

main()726

}27if(!flag)

2833}34

3536

3738 num = ex[ len - 1 ] - 48;39

40for( y = len - 2 ; y >= 0 ; y --)

4147 num +=a;48}

4950

n.push(num);

5152

5354

for (int i = 1; ; i++)

5573

74if(str == '*'

)758485

if(str == '

-' || str == '+'

)868990

9192

if( getchar() == '\n'

)9396}

9798

if(c.size() != 0)99

108for(i = 0 ; c.size() != 0 ; i++)

109113 sd[i] = '\0'

;114

115int

len1;

116 len1 =strlen(sd);

117char *p = sd + len1 - 1

;118

119for(i = len1 ; i >0 ; i --)

120125

if(*p == '-'

)126

129 p--;

130}

131132 printf("

%.2lf\n

",st[0

]);

133}

134else

135138

139}

140return0;

141 }

hdu 1237 簡單計算器 棧

這個題目是大部分人都是用棧來寫的,本週訓練老師也講了兩次棧的原理。自己最近也看了資料結構中與棧有關的內容,還是比較深刻理解了沒有括號情況下表示式求解。include include include using namespace std char s 250 post 250 s是輸入的中綴表示式,...

hdu 1237 簡單計算器(棧)

hdu 1237 簡單計算器 棧 如果是 就把原數壓入棧 如果是 就把相反數壓入棧 如果是 就把當前數和棧頂數計算後壓入棧 如果是 就把當前數和棧頂數計算後壓入棧 注意該題是3 2而不是3 2,有空格 include include include include includeusing name...

hdu1237 簡單計算器 棧

題目鏈結 題目給出的是中綴表示式,中綴表示式是我們習慣上用的計算表示式,人腦計算方便快速,但是計算機不然,計算機計算波蘭和逆波蘭表示式都很方便,但對中綴表示式通常需要轉化成字首或字尾表示式才方便計算。舉例 4 2 5 7 11 轉化成逆波蘭的形式是 4 2 5 7 11 對於人腦,轉化過程是對表示式...