opjudge練習題 逆波蘭表示式(遞迴實現)

2021-09-13 18:33:54 字數 1140 閱讀 4092

電腦最近有點喪心病狂,顯示codeblock的崩潰,緊接著vs的元件缺失,到最後dev的編譯限制,直接讓我失去了掉頭髮的興趣,跑出來,在電閱寫一寫。

題目描述:

逆波蘭表示式是一種把運算子前置的算術表示式,例如普通的表示式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
不多逼逼直接上**:

#include#include#includeusing namespace std;

double a;

char ch[110] ;

double caculate()

}int main()

利用遞迴實現的,本來的思路是用棧來實現的,但限於水平有限,在控制輸入的方面把控的不是很好,實現起來靈活性很差,然後在網上參考一位同學的想法,利用遞迴實現, 不得不說,在我遞迴的想法還不是很成熟的時候,看到這種清爽的**,真的是一種享受。

簡要分析:

遞迴實現:

1、如果輸入乙個數字,執行default,通過atof將字元轉換為double型別返回。

2、如果輸入乙個運算子,執行相應的case語句,return後執行caculate方法,實現遞迴:如果輸入數字,執行1操作,如果輸入運算子,執行2操作

3、一直到最後兩個數進行完相應的運算操作後,轉換為double型別的資料輸出。

ps:用文字寫遞迴對我這種理科生來說有點難,但是這種簡單的遞迴,多看兩遍**基本就明白了,遞迴很重要,還是得好好練練啊。

棧練習 逆波蘭表示式

字尾表示式 逆波蘭表示式 有效操作只有 且運算元是整數 include include include include using namespace std define overflow 2 define ok 1 define error 1 typedef int status typede...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...

php逆波蘭表示式,PHP逆波蘭示意與表示式計算

php逆波蘭表示與表示式計算 說起表示式計算,想起乙個笑話。我向他介紹,我們的php開發框架中有使用rpn對公式解析計算的類。於是,他笑我無知了。並且,還列出一系列的佐證,證明,在php中直接用eval函式就能解決一切問題。也許,你會同意這位老兄的看法。不要緊。你可以看一下peer函式庫。peer函...