POJ——2694逆波蘭表達式


問題描述:

逆波蘭表達式是一種吧運算符前置的算術表達式,例如普通的表達式2+3的逆波蘭表示為+23.逆波蘭表達式的優點是運算符之間不必有優先級的關系,也不必有括號改變運算次序,例如(2+3)*4的逆波蘭表示法為*+2 3 4.本題求解的逆波蘭表達式的值。

 

輸入數據:

輸入為一行,其中運算符和運算數之間都用空格分隔,運算數是浮點數。

輸出要求:

輸出為一行,即表達式的值。

輸入樣例:

* + 11.0 12.0 +24.0 35.0+

輸出樣例:

1357.000000

解題思路:

這個問題看上去有些復雜,如果只是簡單地模擬計算步驟不太容易想清楚,但是如果用遞歸的思想就非常容易想清楚。這里根據逆波蘭表達式的定義進行遞歸求解。在遞歸函數中,針對當前的輸入有5種情況:1。輸入是常數,則表達式的值就是這個常數;2.輸入的是‘+’,則表達式的值是再繼續讀入兩個表達式並計算出他們的值,然后將他們的值進行相加;3.輸入‘-’;4.輸入是‘*’;5.輸入是‘/’;后三種情況與2.相同,只是計算從‘+’變成‘-’,‘*’,‘/’。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM