表示式求值

2021-08-18 07:06:51 字數 1222 閱讀 1583

1792: 演算法3-4:表示式求值

時間限制: 1 sec  記憶體限制: 32 mb

提交: 34  解決: 22

[提交][狀態][討論版]

算數四則運算的規則是1)先乘除,後加減;2)從左算到右;3)先括號內,後括號外。

由此,算式4+2*3-10/5的計算順序為4+2*3-10/5=4+6-10/5=4+6-2=8。

給定乙個以「#」作為結束符的算式,求出算式的結果。

以「#」結尾的表示式,運算數為正整數。每個表示式佔一行。

輸出表示式運算的結果。

4+2*3-10/5#

3*(7-2)#

2*3/2#

8

153

使用棧來解決本題,很多人都會想到。但怎樣建棧,卻帶來了問題。同樣,嚴書上的**實際上也給大家帶來了問題。看過嚴書光碟中**的人應該知道,**中使用了兩個棧,乙個是儲存運算子的,型別為char;另乙個儲存運算數,型別為float。而操作兩個棧的函式都一樣。要知道,除非像c++中使用泛型,c語言中卻基本不能實現這樣的操作。所以在c語言環境中需要將這兩個棧結合在一起。由於char與int有種特別的聯絡,可以使用int來代替char儲存運算子。

總結:

注意靈活運用棧,要是能夠學習c++使用template就更好了。可以模擬stl了。

#includeusing namespace std;

typedef long long ll;

#define rep(i,n) for(int i=0;i<(n);i++)

#define reps(i,f,n) for(int i=(f);i<(n);i++)

const int maxn=1e5+5;

stacknum;

stackch;

int cmp(char c)

int js(int x,int y,char c)

void handle(char c)

}int main()

if(s[i]=='(')

ch.push(s[i]);

else if(s[i]==')')

ch.pop();

}else}}

}printf("%d\n",num.top());

num.pop();

}}

表示式求值

程式的說明見清華大學出版社 資料結構 c語言版 include include define stack init size 40 define stackincrement 20 define ok 1 define false 0 typedef structs stack typedef st...

表示式求值

既然是表示式求值,自然需要在記憶體中儲存計算結果以及中間值。在 用c語言寫直譯器 一 中提過 變數要求是若型別,而 c 語言中的 view plaincopy to clipboardprint?in basic io.h define memery size 26 typedef enum var...

表示式求值

寫了乙個下午,各種糾結,各種問,終於搞明白了。但是自己還是想出來的一點東西的。很爽歪歪的,哈哈。先貼第一次的 include include include include include includeusing namespace std char data 7 7 int sign char ...