【題目描述】 逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式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