as3計算大數減法的方法?

Tags: 大數, 減法,

  應網友的求助,在我完成了大數加法的演算法之後,我自然想到:怎樣計算大數的減法呢?雖然思路和大數加數異曲同工,卻另有微妙不同。以下是我編寫的大數減法程式碼的方法步驟。

工具/原料

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

var sign:String="";//處理結果為負數

as3計算大數減法的方法

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

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

if (j

vars=A;

A=B;

B=s;

j=k

k=j

sign="-"//結果為負

}else if(Number(A)

s=A;//如果數位相同,要保證A是大數

A=B;

B=s;

s=j;

j=k;

k=s;

sign="-"//結果為負

}

本例中,AB數位相同,並且恰巧需要對換:

as3計算大數減法的方法

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

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

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

while (k

B="0"+B;

k++;

}

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

as3計算大數減法的方法

分割字元到陣列

與其它語言如VB、C++不同的地方是:數的最高在陣列首位!!!

var X:Array=[];

var Y:Array=[];

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

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

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

}

與加法不同的是,減法陣列首位不預留空位,因為減法沒進位,但有退位。

as3計算大數減法的方法

模擬陣列對應元素相減,要考慮退位

var R:Array=[];

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

if(Number(X[i-1])

if(R[i-2]==undefined) {

R[i-2]=0;

}

R[i-2]-=1;//從上位借1,

R[i-1]=Number(X[i-1])+10-Number(Y[i-1]);//借1當10

}else {

R[i-1]=Number(X[i-1])-Number(Y[i-1]);//夠減直接減

}

}

得到結果如下:

as3計算大數減法的方法

去掉最高位的"0"

s=true;//去掉最高位的"0"

while (s) {

if(R[0]==0) {//如果最高位有0

R.shift();

}else {

s=false;//沒有0,退出程式

}

as3計算大數減法的方法

處理結果為負數的情況

if (sign=="-") {

R.unshift("-");

}

as3計算大數減法的方法

輸出結果

trace(R.join (""));

你也可以輸出到文字框。

Text3.text=R.join ("")

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

       作者:張志晨

    2012.5.16

as3計算大數減法的方法

相關問題答案