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 ...