ybt1198 逆波蘭表示式

2022-05-16 07:50:21 字數 952 閱讀 3946

逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 + 3的逆波蘭表示法為+ 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如(2 + 3) * 4的逆波蘭表示法為* + 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括+ - * /四個。

輸入為一行,其中運算子和運算數之間都用空格分隔,運算數是浮點數。

輸出為一行,表示式的值。

可直接用printf("%f\n", v)輸出表示式的值v。

* + 11.0 12.0 + 24.0 35.0
1357.000000
這是一道典型的遞迴,首先先要讀懂題,逆波蘭表示式指運算子後面有兩項參加運算的數,分析樣例,得"+ 11.0 12.0"和"+ 24.0 35.0"分別是"*"的兩個因數,要想求積,就要先求出這兩個表示式的結果。

已知每個運算子就要呼叫兩個值,這樣,就知道在遞迴中如何呼叫了:

設f(x)為運算子x的結果,那麼對於每個f(x),就有a,b為參與運算的數

遞迴的邊界條件就是當沒有運算子時,直接返回數值。

#include#include#includeusing namespace std;

double ans;

string ch;

int at=0;

double rd(string x)

i++;//因為有小數點,所以跳過

while(x[i]>='0'&&x[i]<='9')

for(int j=1;j<=tmp;j++)

return a;

}double f(char x)

else

else

printf("%f\n",ans);

return 0;

}

終於自己肝出一道題,感動!

1198 逆波蘭表示式

時間限制 1000 ms 記憶體限制 65536 kb逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4。本題求解逆波蘭表示式的值,其中運...

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...