題目簡化描述:對於只含有+與*的表示式進行,按「順序」計算【從左往右依次計算】以及按照「正常」方式計算。
例如:1*1+2*2
按照順序計算=6.
按正常方式計算=5
**如下:
主程式:
public static void main(string arg)
// 順序計算
public static int ordercal(char opestr)
stackstack = new stack<>();
// 將第乙個值進棧
stack.push(opestr[0] - 48);
// 迴圈從i=1開始,因為i=0時將會導致opestr[i - 1]陣列越界。
for (int i = 1; i < opestr.length; i++)
else}}
// 最終棧內只有乙個值,這個值就是最終的求和結果
return stack.pop();
}// 正常計算,思路是:將乘法先計算,將加法資料壓到棧中最後進行統一計算。
public static int normalcal(char opestr)
stackstack = new stack<>();
stack.push(opestr[0] - 48);
for (int i = 1; i < opestr.length; i++)}}
int sum = 0;
// 遍歷stack,棧內的元素都是待加的元素,累加,即可求得最終值
for (integer integer : stack)
return sum;}}
中綴表示式與字尾表示式的轉換
從最簡單的例子出發 1 2 3 4 轉換成字尾表示式 1 2 3 4 關鍵是要理解 字尾表示式是借用堆疊的 先出來實現運算的,即 上述的表示式可以以佇列形式寫出,然後借用堆疊進行計算 如果是運算元,壓棧,如果是操作符,一次性彈出兩個,分別是運算元2和運算元1 在理解這個原因的基礎上,再看,中綴和字尾...
表示式求值的java實現
對整數表示式求值.表示式中可能包含 四則運算,以及括號,比如 4 2 3 10 5,1 2 4 5 9 7 等.思路 將括號之間的內容當做子表示式求值,得出子表示式的結果後就可以去掉括號了.使用optr棧儲存運算子,opnd棧儲存運算元.解析表示式,如果得到運算元就存入opnd棧中,如果得到運算子,...
中綴表示式與字首 字尾表示式的轉換
中綴表示式 便於人看 字首表示式 又稱波蘭式,運算子在前邊,運算數在後邊 字尾表示式 又稱逆波蘭式,運算數在前邊,運算子在後邊 一 中綴表示式轉換字首表示式 1 初始化兩個棧,s1 存放數字 s2 存放運算子 2 表示式右邊開始,遍歷表示式 3 遇到數字放入 s1中,遇到運算子放入 s2中,放入法則...