雙棧 有括號的四則運算求值

2021-10-21 19:28:32 字數 1205 閱讀 3753

題目都一樣,稍微改一下輸入。**通過了以下 3 題的測試資料。其中,leetcode的兩題的測試資料不夠複雜(下面說明)。**的正確性,還需要更多的測試資料來測。

224. 基本計算器

227. 基本計算器 ii

題目 1683: 演算法3-4:表示式求值

leetcode 227 題的測試資料,沒有包含以下兩種情況:

1、負數開頭。類似:-2+...

2、左括號後的第乙個數是負數。類似:2*(-3+4)...

另外,如果有leetcode會員,可以再提交一下這題:772. 基本計算器 iii

#include#include#include#includeusing namespace std;

// 裝數字的棧

stacknum;

// 裝符號的棧。從棧底到棧頂方向,符號運算優先順序越高

// 優先順序越高,越要優先計算

// ) < +、- < *、/ < (

stackopr;

// 儲存符號優先順序

mapprio;

void initpriority()

// 雙目運算子的計算。c:中間的符號;a:左邊的數;b:右邊的數

int cal(int a, int b, char c)

if (c=='-')

if (c=='*')

if (c=='/')

return 0;

}void docal()

// 特殊情況:-1+...

// (-2+3-...)

// 2+(3-2+1)

// 2+(-2+1)*2/2 2+(2-1)*2

// 1+2*3/2

int calculate(string s)

int t=0; // 用於字串轉int值

for(int i=0; iif (isdigit(s[i]))

}

else

if (!opr.empty() && opr.top() == '(' && s[i]==')') else }}

}while(!opr.empty())

return num.top();

}int main()

return 0;

}

利用棧結構實現四則運算求值

文章目錄 5.思考題 棧是計算機中非常基礎而又極其重要的一種資料結構,許多演算法的實現都離不開棧,它的特點是 先進後出 也可以說 後進先出 打乙個形象的比方 棧好比乙個彈夾,最先放入的子彈只能最後打出 而最後放入的子彈則最先打出。我們生活中接觸的表示式大部分都是中綴表示式,形如a b,這種表示式的特...

含括號的四則運算

總體思路 需要用到棧,從中綴表示式到字尾表示式,再把字尾表示式轉化為結果,比如計算9 3 1 5 4 2,這個式子就叫做中綴表示式,然後我們需要把它轉化成字尾表答式,方法 將中綴表示式從左到右讀取,如果是數字,直接輸出到字尾表示式,如果是字元,則如果是右括號,把從棧頂開始到棧中左括號的字元輸出到字尾...

帶括號的四則運算

帶括號的四則運算 public class caculatordemo 帶括號的四則運算 param exp return public static double calckuohao string exp else 不帶括號的四則運算 param exp return public static...