1. 程式人生 > >Openjudge-2694-逆波蘭表示式

Openjudge-2694-逆波蘭表示式

這是波蘭表示式,題目中叫它是逆波蘭式。

這個題的話,我們用遞迴求解,首先理解一下波蘭表示式,就是將運算子前移了。

像是二叉樹的遍歷一樣,前序遍歷就是波蘭式,中序遍歷就是中綴表示式,後序遍歷就是逆波蘭表示式。

我們讀入一項之後就進行處理,這裡的讀入因為題目中給出了空格,也就是一次讀入的結束,所以我們每次讀入的都是分隔的字元,浮點數的字元也是被分隔的,所以我們就可以直接使用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;
}