1696:逆波蘭表達式

題目連接:http://noi.openjudge.cn/ch0202/1696/函數

總時間限制: 1000ms 內存限制: 65536kB
描述
逆波蘭表達式是一種把運算符前置的算術表達式,例如普通的表達式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
提示
可以使用atof(str)把字符串轉換爲一個double類型的浮點數。atof定義在math.h中。
此題可以使用函數遞歸調用的方法求解。

備註:

這個題目裏面關於逆波蘭表達式的描述是錯誤的。逆波蘭表達式實際上是後綴表達式,詳見百度百科。波蘭表達式是前綴表達式。spa

本題目的AC代碼:code

 1 #include<stdio.h> 
 2 #include<stdlib.h> 
 3 double exp()
 4 { 
 5     char a[10]; 
 6     scanf("%s", a); 
 7     switch(a[0])
 8     { 
 9         case'+': return  exp( ) + exp( );
10         case'-': return  exp( ) - exp( );
11         case'*': return  exp( ) * exp( );
12         case'/': return  exp( ) / exp( );
13         default: return  atof(a);
14     }
15 }
16 int main() 
17 { 
18     double ans; 
19     ans = exp(); 
20     printf("%f\n", ans); 
21     return 0;
22 } 

代碼簡單,不解釋,自行跟蹤推演一下便可理解。本代碼來自某本書,具體不記得出處了……blog

相關文章
相關標籤/搜索