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