如何计算大数减法
在之前,我们已经讨论了如何进行大数加法的计算。现在,我们将要讨论如何进行大数减法的计算。虽然思路和大数加法类似,但是还是有一些微妙的不同之处。
将数值转为字符串
在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,退出循环
}
}
```
处理结果为负数的情况
如果结果为负数,我们需要在结果前面添加一个负号。以下是处理结果为负数的示例代码:
```as3
if (sign "-") {
R.unshift("-");
}
```
输出结果
最后,我们可以将结果输出到控制台或者文本框中。以下是将结果输出到控制台的示例代码:
```as3
trace((";"));
```
你也可以将结果输出到文本框中,例如:
```as3
Text3.text (";");
```
这是一个根据实践总结的经验,绝对原创的方法。希望对你有所帮助!
作者:张志晨
日期:2012.5.16
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。