波蘭表示式

2022-06-13 19:36:11 字數 1625 閱讀 1233

標籤(空格分隔): 演算法競賽

2694:逆波蘭表示式

檢視 提交 統計 提示 提問

總時間限制: 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中。

此題可使用函式遞迴呼叫的方法求解。

**計算概論05

我寫了兩次,第一次用棧模擬,tle了,第二次直接看的答案敲的,辦法真是巧妙,**比我短的多,邏輯也比我清楚,執行時間也比我快得多。。。

先附上我用函式呼叫棧模擬的**。長的一塌糊塗,還不好懂。

#include 

#include

#include

#include

#include

#define n 10000

#define m 30

using

namespace

std;

int scan();

char a[n][m];

void operation(int i);

int judgeoperator(int n);

stack

num;

int main()

int scan()

return i;

}void operation(int n)

if (!n) return;

operation(--n);

}int judgeoperator(int n)

case

'-':

case

'*':

case

'/':

default:return

0;break;

}}

再附上我用答案的方法,純遞迴實現

#include 

#include

using

namespace

std;

double

exp()

}int main()

呵,顯然被完虐了。

看到那個表示式,首先我們會思考,到底是怎麼實現的表示式的運算。然後我們會看到,讀到運算子時,繼續判斷下兩個是不是數字,如果是,就繼續該過程。如果後兩個是數字,就依次讀入後轉化為浮點數,執行前面的運算子所對應的內容。這個過程是遞迴的,正是因為我沒有認識到這一點,才寫了這個垃圾**。。。

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭表示式與逆波蘭表示式

2018年09月03日 11 29 15 jitwxs 閱讀數 70 標籤 波蘭 字首 更多 個人分類 演算法與資料結構 常見的算術表示式,稱為中綴表示式,例如 5 6 4 2 3波蘭表示式也稱為字首表示式,以上面的例子為例,其波蘭表示式為 5 6 4 2 3中綴表示式轉換字首表示式的操作過程為 1...

波蘭表示式和逆波蘭表示式

題目 根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 示例 1 輸入 2 1 3 輸出 9 解釋 該算式轉化為常見的中綴算術表示式為 2 1 3 9 示例 2 輸入 4 13 5 輸出 6 解釋 該算式轉化為常見的中綴算術表示式為 4 13...