逆波蘭表示式POJ 2694

2022-05-01 23:54:09 字數 1419 閱讀 1695

逆波蘭表示式是一種吧運算子前置的算術表示式,例如普通的表示式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.相同,只是計算從『+』變成『-』,『*』,『/』。

**:

#include#include

#include

#include

using

namespace

std;

double

exp()

}int

main()

逆波蘭表示式是一種吧運算子前置的算術表示式,例如普通的表示式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.相同,只是計算從『+』變成『-』,『*』,『/』。

**:

#include#include

#include

#include

using

namespace

std;

double

exp()

}int

main()

POJ 2694逆波蘭表示式

問題描述 逆波蘭表示式是一種吧運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示為 23.逆波蘭表示式的優點是運算子之間不必有優先順序的關係,也不必有括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4.本題求解的逆波蘭表示式的值。輸入資料 輸入為一行,其中運算子和運算數之間都用空...

poj 2694 逆波蘭表示式(遞迴)

題目 逆波蘭表示式是一種把運算子前置的算術表示式,例如 普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4。本題求解逆波蘭表示式的值,其中運算子包括 四個。input 輸入為一行,其中運...

遞迴專題 POJ 2694 逆波蘭表示式

總時間限制 1000ms 記憶體限制 65536kb 描述 逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式2 3的逆波蘭表示法為 2 3。逆波蘭表示式的優點是運算子之間不必有優先順序關係,也不必用括號改變運算次序,例如 2 3 4的逆波蘭表示法為 2 3 4。本題求解逆波蘭表示式的值,...