表示式計算
##使用方法
輸入合法的表示式,加減乘除,可以帶括號,用空格分開數字和符號,-1為結束標誌,比如:
`2 * 5 + 3 -1`
注意:這是用來算具體答案的,不是轉化成字尾表示式輸出的,當然,思想是遞迴建立表示式樹,然後後序遍歷得逆波蘭式,然後用棧計算結果
##模板
```#include#include#include#include//#includeusing namespace std;
#define mem(x,num) memset(x,num,sizeof(x))
const int n = 1e3 + 5;
const int defaultsize = 100;
int lson[n], rson[n];
int nc = 0;
int cut = 0;
struct num
bool is_op()
double tonum()
};num op[n];
num arra[defaultsize];
void init()
int build_tree(num s, int l, int r)
for (int i(l); i < r; i++)
}if (tag1 < 0)tag1 = tag2;// no + or - outside
if (tag1 < 0)return build_tree(s, l + 1, r - 1); // no * or / outside mean all operator and num in ()
u = ++nc;
lson[u] = build_tree(s, l, tag1);
rson[u] = build_tree(s, tag1 + 1, r);
op[u] = s[tag1];
return u;
}void post(int rt)
double query(num s,int n)
else
p.push(y);}}
return p.top();
}int main()
build_tree(s, 0,n); // strlen(s)
post(1);
cout << query(arra,n)<
C 運算表示式求值順序
優先順序雖然規定了運算物件的組合方式,但是沒有說明運算物件按照什麼順序求值。例如 int i f1 f2 我們不知道先求f1還是先求f2,倘若f1和f2指向並修改了同一物件,則會引發錯誤。例如 int i 0 cout 結果 本人在vs2017中得到的允許結果為1 1,這個就是錯誤表示式,產生未定義...
四則運算表示式求值
03 四則運算表示式求值 輸入輸入為四則運算表示式,僅由陣列 四則運算符 左右括號組成,不含空格。假設運算子結果都是整數。輸出輸出這個表示式的值 分析首先我們要搞清楚表示式的定義是什麼 表示式 由乙個或者多個項組成,多個項的表示式由 連線 項 由乙個或者多個因子組成,多個因子由 連線 因子 由 表示...
四則運算表示式求值
表示式求值是關於棧的應用,涉及到中綴與字尾式的轉換,本文關於10以內不帶括號的四則運算。9 3 4 x 3 24 1 x 9 5 9 9 5 x 9 4 6 2 x 3 1 42 思路 遇到數字直接入數字棧。遇到運算子,第乙個運算子直接入符號棧,後面的需要與符號棧棧頂元素比較優先順序。若當前優先順序...