计算表达式。
只有3种运算符:*,+,- ,
*优先级高于后两者,后两者优先级相同。
有两种符号:{},()。
利用递归和堆栈即可解决。
首先遇到左括号开始入栈直到遇到右括号,遇到右括号时对括号内的数进行计算。
考虑到*优先级较高,因此遇到*直接对其左右集合进行运算。
最后得到不含括号和*的表达式,从左往右计算即可。
http://poj.org/problem?id=2269

1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 const int maxn = 300; 5 const int maxc = 30; 6 char buf[maxn]; 7 int stack[maxn][maxc]; 8 char op[maxn]; 9 int p, k; 10 int vis[maxc]; 11 12 void caculate(){ 13 //meeting eol or right paren RETURN 14 if(buf[p] == '