表示式求值 遞迴解法

2021-10-13 20:51:57 字數 1179 閱讀 9650

給定乙個字串str,str表示乙個公式,公式裡可以有整數,加減乘除和左右括號,返回公式的計算結果(注意:題目中所有運算都是整型運算,向下取整,且保證資料合法,不會出現除0等情況)。

輸入

48*((70-65)-43)+8*1

輸出-1816

傳統思路

一般而言,表示式求值,先將中綴表示式轉化為字尾表示式=》進一步進行求解

本題採取,遞迴思路

cal(string s,int k)表示從串s的第k個往後計算乙個單位

這裡乙個最小計算單位是,遇到右括號,或者遇到串結尾

**實現

pair<

int,

int>

calc

(string s,

int k)if(

!isdigit

(s[i]

)|| i==s.

length()

-1|| s[i+1]

==')'

)//如果後面乙個是)或者末尾 需要結算

if(sign==

'-'|| sign==

'+')

//加減

else

if(sign==

'*'|| sign==

'/')

//乘除需要用到前乙個數字

num=0;

sign=s[i]

;//調整到下乙個符號}}

while

(!st.

empty()

)//剩餘棧中的數 相加

return

make_pair

(res,i);}

intmain()

關鍵點

採取sign記錄運算子,每當遇到右括號,或者結尾,或者非數字=》需要將前面部分進行計算

對於+ - 那麼只需要乙個運算數=》存入棧

對於* / 那麼還需要棧頂元素參與運算,結果入棧

對於( 那麼(之後的部分遞迴進行計算

表示式求值(遞迴)

給定乙個只包含加法和乘法的算術表示式,請你程式設計計算表示式的值。輸入僅有一行,為需要你計算的表示式,表示式中只包含數字 加法運算子 和乘法運算子 且沒有括號,所有參與運算的數字均為 0 到 231 1 之間的整數。輸入資料保證這一行只有 0 9 這 12 種字元。輸入樣例 1 1 1 3 4 輸入...

表示式求值(遞迴)

題目 輸入為四則運算表示式,僅由整數 組成,沒有空格,要求求其值。假設運算子結果都是整數。結果也是整數。include include include using namespace std 讀入乙個因子並返回其值 intfactor value 讀入乙個項並返回其值 intterm value 讀...

表示式求值 遞迴

下面是 實現 include include include using namespace std intfactor value intterm value intexpression value intmain intexpression value else else return resu...