1198:逆波蘭表達式

【題目描述】
逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式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
double solve()
{
    char a[1000];
    scanf("%s",&a);
    if(a[0]=='+')
        return solve()+solve();
    else
        if(a[0]=='-')
            return solve()-solve();
        else if(a[0]=='*')
            return solve()*solve();
        else if(a[0]=='/')
            return solve()/solve();
        else
            return atof(a);    //這個函數是將字符串轉化爲浮點型數
}
int main()
{
    printf("%f\n",solve());
    return 0;
}

其實這個題還能夠用棧吧哈哈反正我沒事我以爲應該能夠 用棧;函數

用遞歸的思想;字體

若是第一個字符是運算符,則把後兩個字符按照這個運算符進行計算,若是第二個仍是字符,則繼續日後判斷(是否是數字)並計算下兩個數;紅色字體爲遞歸思想,進行計算就是調用本身,在調用本身的時候順便判斷一波是否是運算符spa

感受有遞歸的意思。。。。。code

相關文章
相關標籤/搜索