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;}
理工狗不想被人文素養拖後腿?不妨關注微信公眾號:
為你讀最好的書~
推薦閱讀: