2016 - 2024

感恩一路有你

如何计算大数减法

浏览量:3305 时间:2024-06-24 18:27:06 作者:采采

在之前,我们已经讨论了如何进行大数加法的计算。现在,我们将要讨论如何进行大数减法的计算。虽然思路和大数加法类似,但是还是有一些微妙的不同之处。

将数值转为字符串

在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

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。