AS3中的大數(shù)加法算法
在編寫(xiě)AS3代碼時(shí),有時(shí)會(huì)遇到需要計(jì)算很大的數(shù)的情況。由于計(jì)算機(jī)硬件和字長(zhǎng)的限制,所能表示的數(shù)值范圍是有限的,當(dāng)需要對(duì)兩個(gè)很大的數(shù)進(jìn)行計(jì)算時(shí),可能會(huì)出現(xiàn)溢出錯(cuò)誤,無(wú)法進(jìn)行計(jì)算。 在其他語(yǔ)言如C等中,
在編寫(xiě)AS3代碼時(shí),有時(shí)會(huì)遇到需要計(jì)算很大的數(shù)的情況。由于計(jì)算機(jī)硬件和字長(zhǎng)的限制,所能表示的數(shù)值范圍是有限的,當(dāng)需要對(duì)兩個(gè)很大的數(shù)進(jìn)行計(jì)算時(shí),可能會(huì)出現(xiàn)溢出錯(cuò)誤,無(wú)法進(jìn)行計(jì)算。
在其他語(yǔ)言如C等中,常用的處理方法是采用數(shù)組存放一個(gè)大數(shù)的每個(gè)位上的數(shù)字,數(shù)組的首位對(duì)應(yīng)大數(shù)的個(gè)位。在計(jì)算過(guò)程中,需要處理進(jìn)位、退位和負(fù)數(shù)。
然而,在AS3中,我根據(jù)數(shù)組的“疏松”特點(diǎn),采用了與其他語(yǔ)言不同的方法來(lái)解決這個(gè)問(wèn)題。以下是我創(chuàng)造的大數(shù)加法代碼的步驟和方法。
將數(shù)值轉(zhuǎn)為字符串
在AS3程序中,通過(guò)輸入文本框獲取大數(shù)時(shí),大數(shù)已經(jīng)變成了字符串。只需要注意末尾多了一個(gè)不可見(jiàn)的空字符,所以在求長(zhǎng)度時(shí)要減去1。
var A:String Text1.text;
var B:String Text2.text;
var j:int A.length - 1;
var k:int B.length - 1;
var long:int j > k ? j : k; // 取得最長(zhǎng)數(shù)位個(gè)數(shù)
判斷數(shù)位,保證被減數(shù)大于減數(shù)
如果被減數(shù)A的數(shù)位少于減數(shù)B,就將兩個(gè)數(shù)及數(shù)位個(gè)數(shù)對(duì)調(diào)一下。
if (j lt; k) {
var s:String A;
A B;
B s;
j k;
k j;
}
補(bǔ)充數(shù)位,使兩數(shù)數(shù)位相同
如果兩個(gè)數(shù)的數(shù)位不同,需要在較小的數(shù)的最高位前面補(bǔ)充0,使兩個(gè)數(shù)的數(shù)位相同。這是本方法的創(chuàng)新之處!
while (k lt; j) {
B "0" B;
k ;
}
分割字符串到數(shù)組
與其他語(yǔ)言的方法不同的地方是:AS3中數(shù)組的首位為空,為預(yù)留的用于進(jìn)位的空位。如果無(wú)進(jìn)位,程序會(huì)刪除它。
var X:Array [];
var Y:Array [];
for (var i:int long; i gt; 0; i--) {
X[i] (i - 1); // 字符在字符串中最大索引值比個(gè)數(shù)少1
Y[i] (i - 1);
}
模擬數(shù)組對(duì)應(yīng)元素相加,考慮進(jìn)位
創(chuàng)建一個(gè)結(jié)果數(shù)組R,用于保存結(jié)果。從個(gè)位開(kāi)始遍歷數(shù)組,將對(duì)應(yīng)的元素相加,再加上進(jìn)位。
var R:Array [];
var j:int 0; // 個(gè)位無(wú)進(jìn)位
for (i long; i > 0; i--) {
var n:Number Number(X[i]) Number(Y[i]) j; // 兩數(shù)相加再加上進(jìn)位
R[i] n % 10; // 求余,結(jié)果是個(gè)位數(shù)字
j int(n / 10); // 求進(jìn)位,結(jié)果是0或者1
}
if (j > 0) {
// 計(jì)算完了,如果有進(jìn)位,就放在預(yù)留的數(shù)組的首位。
R[0] j;
} else {
// 無(wú)進(jìn)位,刪除無(wú)用的首位元素。
();
}
最后,可以通過(guò)trace((""))語(yǔ)句輸出結(jié)果,也可以將結(jié)果輸出到文本框中。
以上是我根據(jù)實(shí)踐經(jīng)驗(yàn)創(chuàng)造的大數(shù)加法算法,希望能對(duì)AS3編程中的大數(shù)計(jì)算問(wèn)題提供一些思路和方法。