as3怎樣計算大數的加法?

Tags: 加法, 大數,

  一位網友求助:要計算

“65135168131684301349840650+981603549816879516341638789163516846164=?”

  我不知道這個計算的實際意義。網友只求助算法的實現。我在網上搜索了一下,目前網上尚無as3語言的大數計算代碼。

  難題是:由於計算機硬件及字長的限制,所能表示的數值範圍是有限的,當我們需要對兩個很大的數進行計算時,會出現溢出錯誤,無法進行計算。

  其它語言如C++等,目前研究的成果是用數組存放一個大數的每個位上的數字,數組的首位對應的大數的個位。在計算過程中,要處理進位與退位、負數。

  但我根據as3數組的“疏鬆”特點,採用了與其它語言不同的辦法。以下是我創寫大數加法代碼的方法步驟。

工具/原料

win7+Flash cs5.5+as3

步驟/方法

將數值轉為字符串

在flash程序中,通過在文本框中的輸入來獲取大數。這時,大數已經變成了字符串。只不過它的末尾多了一個不可見的空字符。所以在求長度時要減去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

as3怎樣計算大數的加法

判斷數位,保證被減數A大於減數B

如果A的數位少於B,就將兩個數及數位個數對調一下。

if (j

vars=A;

A=B;

B=s;

j=k

k=j

}

本例中,AB恰巧需要對換:

as3怎樣計算大數的加法

用"0"補充數位,使兩數數位相同

這是本方法的創新之處!!

如果兩數數位不同,就用"0"在較小的數最高位前面補充數位,使兩數數位相同。

while (k

B="0"+B;

k++;

}

如果需要補充數位,就一定是給B補充。

as3怎樣計算大數的加法

分割字符到數組

與其它語言如VC\C++的方法不同的地方是:數的最高在數組首位!!!

var X:Array=[];

var Y:Array=[];

for (var i:int =long; i>0; i--) {

X[i]=A.charAt(i-1);//字符在字符串中最大索引值比個數少1

Y[i]=B.charAt(i-1);

}

數組首位為空,為預留的用於進位的空位。如果無進位,程序會刪除它。

as3怎樣計算大數的加法

模擬數組對應元素相加,要考慮進位

var R:Array=[];//保存結果

j=0;//個位無進位

for (i=long; i>0; i--) {

varn=Number(X[i])+Number(Y[i])+j;兩數相加再加上進位

R[i]=n%10;//求餘,結果是個位數字

j=int(n/10);//求進位,結果是0或者1

}

if (j>0) {//計算完了,如果有進位,就放在預留的數組的首位。

R[0]=j;

} else {//無進位,就刪除無用的首位元素。

R.shift();

}

輸出查看結果:trace(R.join (""));

你也可以輸出到文本框: Text3.text=R.join ("")

來自實踐的體會 絕對原創的經驗

        作者:張志晨

         2012.5.15

as3怎樣計算大數的加法

相關問題答案