Openjudge-2694-逆波蘭表示式
阿新 • • 發佈:2018-12-08
這是波蘭表示式,題目中叫它是逆波蘭式。
這個題的話,我們用遞迴求解,首先理解一下波蘭表示式,就是將運算子前移了。
像是二叉樹的遍歷一樣,前序遍歷就是波蘭式,中序遍歷就是中綴表示式,後序遍歷就是逆波蘭表示式。
我們讀入一項之後就進行處理,這裡的讀入因為題目中給出了空格,也就是一次讀入的結束,所以我們每次讀入的都是分隔的字元,浮點數的字元也是被分隔的,所以我們就可以直接使用atof函式將字元轉浮點。
然後就很簡單了,除了讀入運算子,我們直接返回浮點數的值之外,我們都要進行遞迴的運算,既然有加號,那肯定還有一項等著加減,但是一定要是遞迴的計算,因為波蘭表示式本身就是一個遞迴的過程。
像是+ 2 * 3 4 ,就是 2 +(3 * 4),三乘四是一個項,所以我們要遞迴,判斷是否是運算子。這一項並不一定就是一個數字。
#include <iostream> #include <math.h> using namespace std; double exp() { char s[20]; cin>>s; // cout<<s<<endl; switch (s[0]) { case '+': return exp()+exp(); case '-': return exp()-exp(); case '*': return exp()*exp(); case '/': return exp()/exp(); default: return atof(s); } } int main() { printf("%lf\n",exp()); return 0; }