1 逆波蘭式也叫后綴表達(dá)式(將運(yùn)算符寫在操作數(shù)之后),相應(yīng)的波蘭表達(dá)式叫前綴表達(dá)式(運(yùn)算符在操作數(shù)之前)
如:我們平時(shí)寫a+b,這是中綴表達(dá)式,寫成后綴表達(dá)式就是:ab+
(a+b)*c-(a+b)/e的后綴表達(dá)式為:
(a+b)*c-(a+b)/e
=>
((a+b)*c)((a+b)/e)-
=>
((a+b)c*)((a+b)e/)-
=>
(ab+c*)(ab+e/)-
=>
ab+c*ab+e/-
2 你可以把一個(gè)多項(xiàng)式寫成樹的形式,比如你上面的式子:
-
/ \
* /
/ \ / \
+ c + e
/ \ / \
a b a b
/ /逆波蘭式就是這棵樹的后序遍歷結(jié)果。
/ /而這棵樹的前序遍歷就是波蘭表達(dá)式,即前綴表達(dá)式。
/*求解波蘭表達(dá)式的值*/
輸入數(shù)據(jù):
輸入為一行,其中運(yùn)算符和運(yùn)算數(shù)之間都用空格分隔,運(yùn)算數(shù)是浮點(diǎn)數(shù)
輸出要求:
輸出為一行,表達(dá)式的值。
#include <iostream>
#include <cstdlib>
using namespace std;
double exp() //返回波蘭表達(dá)式的值
{
char a[10]; //用于存儲(chǔ)第一個(gè)非空格字符
cin >> a;.
switch(a[0])
{ //遞歸的思想,需要好好理解。。。
case '+': return exp() + exp();
case '-': return exp() - exp();
case '*': return exp() * exp();
case '/': return exp() / exp();
default : return atof(a); //將字符串轉(zhuǎn)化成浮點(diǎn)數(shù)
}
}
int main()
{
freopen( "in.txt", "r", stdin );
freopen( "out.txt", "w", stdout );
cout << exp() << endl;//以后要把精度控制加上
return 0;
}
逆波蘭表達(dá)式和波蘭表達(dá)式 - 閉門造車@xp的日志 - 網(wǎng)易博客
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。