問題說明:
給定乙個字串,例如:
string gsstring = "3565767 + 276756 * 76764 - 76 / 2 + 1";
如何將其當作數字運算,即相當於:
int gsint = 3565767 + 276756 * 76764 - 76 / 2 + 1;
我們如何來解析這樣乙個簡單的公式(當前沒有括號參與操作 )。
第一步:將此字串變換為位元組陣列,將問題轉換為針對位元組陣列的處理。
byte b = gsstring.getbytes();
第二步:編寫工具方法。
1、判定乙個位元組是否為數字。
final public static boolean isdig(byte ch)
2、將所有的數字位元組整理為乙個真實的數字。
final public static int dig(byte b)
return record;
}
3、將位元組表示的符號轉換為真正的運算操作。
final public static int calc(int record1, int record2, byte oper)
return record;
}
第三步:解析位元組陣列,將其記錄為乙個數字的集合以及乙個符號的集合。
final public static vector parse(byte b) while (j < b.length && isdig(b[j]));
bb = new byte[size];
j = i;
k = 0;
do while (j < b.length && isdig(b[j]));
i = i + size - 1;
dig.add(new integer(dig(bb)));
} else
} v.add(sgn);
v.add(dig);
return v;
}
第四步:操作得到的結果。
提供思路:這種公式的特點是數字集合總是比符號集合多1,並且都是按照順序儲存的(現在採取的方案是這樣)。所以,根據先乘除後加減原則,檢索符號集合中的乘除後再檢索加減,數字集合位置索引與符號索引之間存在對應關係,不難發現的。
增加處理:
public static int test(string gs)
}for (int i = 0; i < sgn.size(); i++)
}} return ((integer) dig.elementat(0)).intvalue();
}static private void operate(vector sgn, vector dig, int index)
此方式完全應用了算式的特點,加入括號處理相對複雜。
如何擴充套件加入(){},變得更強大一點??思考
ok。
不看公式自己復原魔方
2 3階完成 網上很容易找到魔方公式,所以復原魔方已經變成了一種記憶,而不再試遊戲,我感覺按公式復原魔方是一種玩法,快速復原魔方是一種樂趣。對我來說,自己復原魔方,這裡面有另外的樂趣。看過 當幸福來敲門 裡面男主人公可以復原魔方,所以在我的印象中自己復原魔方應該是很難的,對我來說恐怕不大可能。但是又...
自定義公式的計算處理
示例資料 create table sale date datetime,code varchar 10 amt int insert sale select 2004 10 22 aa 15000 union all select 2004 10 22 bb 18000 union all sel...
自定義公式的計算處理
示例資料 create table sale date datetime,code varchar 10 amt int insert sale select 2004 10 22 aa 15000 union all select 2004 10 22 bb 18000 union all sel...