2016 - 2024

感恩一路有你

AS3中的大数加法算法

浏览量:3995 时间:2024-01-13 08:42:18 作者:采采

在编写AS3代码时,有时会遇到需要计算很大的数的情况。由于计算机硬件和字长的限制,所能表示的数值范围是有限的,当需要对两个很大的数进行计算时,可能会出现溢出错误,无法进行计算。

在其他语言如C等中,常用的处理方法是采用数组存放一个大数的每个位上的数字,数组的首位对应大数的个位。在计算过程中,需要处理进位、退位和负数。

然而,在AS3中,我根据数组的“疏松”特点,采用了与其他语言不同的方法来解决这个问题。以下是我创造的大数加法代码的步骤和方法。

将数值转为字符串

在AS3程序中,通过输入文本框获取大数时,大数已经变成了字符串。只需要注意末尾多了一个不可见的空字符,所以在求长度时要减去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 > k ? j : k; // 取得最长数位个数

判断数位,保证被减数大于减数

如果被减数A的数位少于减数B,就将两个数及数位个数对调一下。

if (j lt; k) {
    var s:String  A;
    A  B;
    B  s;
    j  k;
    k  j;
}

补充数位,使两数数位相同

如果两个数的数位不同,需要在较小的数的最高位前面补充0,使两个数的数位相同。这是本方法的创新之处!

while (k lt; j) {
    B  "0"   B;
    k  ;
}

分割字符串到数组

与其他语言的方法不同的地方是:AS3中数组的首位为空,为预留的用于进位的空位。如果无进位,程序会删除它。

var X:Array  [];
var Y:Array  [];
for (var i:int  long; i gt; 0; i--) {
    X[i]  (i - 1); // 字符在字符串中最大索引值比个数少1
    Y[i]  (i - 1);
}

模拟数组对应元素相加,考虑进位

创建一个结果数组R,用于保存结果。从个位开始遍历数组,将对应的元素相加,再加上进位。

var R:Array  [];
var j:int  0; // 个位无进位
for (i  long; i > 0; i--) {
    var n:Number  Number(X[i])   Number(Y[i])   j; // 两数相加再加上进位
    R[i]  n % 10; // 求余,结果是个位数字
    j  int(n / 10); // 求进位,结果是0或者1
}
if (j > 0) {
    // 计算完了,如果有进位,就放在预留的数组的首位。
    R[0]  j;
} else {
    // 无进位,删除无用的首位元素。
    ();
}

最后,可以通过trace((""))语句输出结果,也可以将结果输出到文本框中。

以上是我根据实践经验创造的大数加法算法,希望能对AS3编程中的大数计算问题提供一些思路和方法。

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