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编程中的大数计算问题提供一些思路和方法。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。
上一篇
如何复制公式和修改公式
下一篇
如何授权对可移动媒体进行格式化