成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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)題提供一些思路和方法。

標(biāo)簽: