標籤:

POJ 2694:逆波蘭表達式

OpenJudge - 2694:逆波蘭表達式

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

輸入

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

輸出

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

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

樣例輸入

* + 11.0 12.0 + 24.0 35.0

樣例輸出

1357.000000

提示:

可使用atof(str)把字元串轉換為一個double類型的浮點數。atof定義在math.h中。

此題可使用函數遞歸調用的方法求解。

來源:

計算概論05

一、思路分析:

這道題需要我們做的,其實就是在輸入中找出「運算符、數字、數字」這樣的片段,然後根據運算符對兩個數字進行進算,將計算結果放回原位置替代原來的片段,如此循環,直到只剩下一個數字。這個數字就是答案。

二、代碼實現

使用遞歸將能夠以很簡潔方式實現以上思路,供參考:

來源:poj 2694 逆波蘭表達式(遞歸)

#include<iostream>#include<cstdio>#include<cstdlib>//atof()的頭文件using namespace std;double expe(){ char s[30]; cin>>s; switch(s[0]) { case +: return expe()+expe(); case -: return expe()-expe(); case *: return expe()*expe(); case /: return expe()/expe(); default: return atof(s); break; }}int main(){ printf("%lf
",expe()); return 0;}

理工狗不想被人文素養拖後腿?不妨關注微信公眾號:

為你讀最好的書~

推薦閱讀:

經典動態規劃: 尋找最大矩形 POJ1050
演算法基礎:從動態規劃看人生
主席樹與POJ2104

TAG:POJ | 遞歸 | CC |