題意:給你乙個只有+ - * / 的計算表示式 , 要你求出結果.
坑爹:一開始我只是以為只要在輸入的時候遇到*或者/就彈出來進行計算,然後在到最後計算 + 和 - 的時候直接彈出
乙個乙個計算,最後才發現原來在最後彈出來計算的時候要全部反過來,不能直接彈出就計算然後壓入.
解法:遇到 * 或者 / 就彈出兩個進行計算, 然後壓入結果 , 到最後的時候把棧裡的數字反過來,也就是用乙個陣列從0 - n
開始存每乙個出棧的數字 , 符號棧也是相同的操作 , 然後就可以進行正常的按順序這樣做 + 和 - 操作了.
view code
1 #include2 #include3using
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 對於人腦,轉化過程是對表示式...