如何計算大數(shù)減法
在之前,我們已經(jīng)討論了如何進行大數(shù)加法的計算?,F(xiàn)在,我們將要討論如何進行大數(shù)減法的計算。雖然思路和大數(shù)加法類似,但是還是有一些微妙的不同之處。將數(shù)值轉(zhuǎn)為字符串在Flash程序中,我們可以通過在文本框中
在之前,我們已經(jīng)討論了如何進行大數(shù)加法的計算?,F(xiàn)在,我們將要討論如何進行大數(shù)減法的計算。雖然思路和大數(shù)加法類似,但是還是有一些微妙的不同之處。
將數(shù)值轉(zhuǎn)為字符串
在Flash程序中,我們可以通過在文本框中輸入來獲取大數(shù)。這時,大數(shù)已經(jīng)被轉(zhuǎn)換成了字符串。需要注意的是,字符串末尾可能會多出一個不可見的空字符,所以在求長度時需要減去1。以下是將大數(shù)A和B轉(zhuǎn)換為字符串的示例代碼:
```as3
var A:String Text1.text;
var B:String Text2.text;
var j:int A.length - 1;
var k:int B.length - 1;
var len:int j > k ? j : k; //取得最長數(shù)位個數(shù)
```
處理結(jié)果為負數(shù)
首先,我們需要判斷數(shù)位,保證被減數(shù)A大于減數(shù)B。如果A的數(shù)位少于B,則交換兩個數(shù)及數(shù)位個數(shù)。同時,我們需要將結(jié)果標記為負數(shù)。以下是處理結(jié)果為負數(shù)的示例代碼:
```as3
if (j < k) {
var s:String A;
A B;
B s;
j k;
k j;
sign "-";
} else if (Number(A) < Number(B)) {
s A;
A B;
B s;
s j;
j k;
k s;
sign "-";
}
```
補充數(shù)位使兩數(shù)數(shù)位相同
如果兩個數(shù)的數(shù)位不同,我們需要用0在較小的數(shù)的最高位前面添加數(shù)位,使兩個數(shù)的數(shù)位相同。以下是補充數(shù)位的示例代碼:
```as3
while (k < j) {
B "0" B;
k ;
}
```
分割字符到數(shù)組
與其他語言如VB、C不同的是,大數(shù)的最高位在數(shù)組的首位。以下是將大數(shù)A和B分割為數(shù)組X和Y的示例代碼:
```as3
var X:Array [];
var Y:Array [];
for (var i:int len; i > 0; i--) {
X[i-1] (i-1); //字符在字符串中最大索引值比個數(shù)少1
Y[i-1] (i-1);
}
```
模擬數(shù)組對應(yīng)元素相減
接下來,我們需要模擬數(shù)組對應(yīng)元素相減,并考慮可能的退位情況。以下是模擬數(shù)組對應(yīng)元素相減的示例代碼:
```as3
var R:Array [];
for (i len; i > 0; i--) {
if (Number(X[i-1]) < Number(Y[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]); //夠減直接減
}
}
```
去掉最高位的0
最后,我們需要去掉結(jié)果中最高位的0。以下是去掉最高位的0的示例代碼:
```as3
var s:Boolean true; //去掉最高位的0
while (s) {
if (R[0] 0) {
//如果最高位有0
();
} else {
s false; //沒有0,退出循環(huán)
}
}
```
處理結(jié)果為負數(shù)的情況
如果結(jié)果為負數(shù),我們需要在結(jié)果前面添加一個負號。以下是處理結(jié)果為負數(shù)的示例代碼:
```as3
if (sign "-") {
R.unshift("-");
}
```
輸出結(jié)果
最后,我們可以將結(jié)果輸出到控制臺或者文本框中。以下是將結(jié)果輸出到控制臺的示例代碼:
```as3
trace((";"));
```
你也可以將結(jié)果輸出到文本框中,例如:
```as3
Text3.text (";");
```
這是一個根據(jù)實踐總結(jié)的經(jīng)驗,絕對原創(chuàng)的方法。希望對你有所幫助!
作者:張志晨
日期:2012.5.16