多语言展示
当前在线:1461今日阅读:175今日分享:29

as3怎样计算大数的加法

一位网友求助:要计算“6543+987954=?”  我不知道这个计算的实际意义。网友只求助算法的实现。我在网上搜索了一下,目前网上尚无as3语言的大数计算代码。  难题是:由于计算机硬件及字长的限制,所能表示的数值范围是有限的,当我们需要对两个很大的数进行计算时,会出现溢出错误,无法进行计算。  其它语言如C++等,目前研究的成果是用数组存放一个大数的每个位上的数字,数组的首位对应的大数的个位。在计算过程中,要处理进位与退位、负数。  但我根据as3数组的“疏松”特点,采用了与其它语言不同的办法。以下是我创写大数加法代码的方法步骤。
工具/原料

win7+Flash cs5.5+as3

步骤/方法
1

将数值转为字符串在flash程序中,通过在文本框中的输入来获取大数。这时,大数已经变成了字符串。只不过它的末尾多了一个不可见的空字符。所以在求长度时要减去1。var A:String=Text1.textvar B:String=Text2.textvar j:int=A.length-1;var k:int=B.length-1;var long:int=j

2

判断数位,保证被减数A大于减数B 如果A的数位少于B,就将两个数及数位个数对调一下。if (j

3

用'0'补充数位,使两数数位相同 这是本方法的创新之处!!如果两数数位不同,就用'0'在较小的数最高位前面补充数位,使两数数位相同。while (k

4

分割字符到数组 与其它语言如VC\C++的方法不同的地方是:数的最高在数组首位!!!var X:Array=[];var Y:Array=[];for (var i:int =long; i>0; i--) {X[i]=A.charAt(i-1);//字符在字符串中最大索引值比个数少1Y[i]=B.charAt(i-1);}数组首位为空,为预留的用于进位的空位。如果无进位,程序会删除它。

5

模拟数组对应元素相加,要考虑进位var R:Array=[];//保存结果j=0;//个位无进位for (i=long; i>0; i--) {varn=Number(X[i])+Number(Y[i])+j;两数相加再加上进位R[i]=n%10;//求余,结果是个位数字j=int(n/10);//求进位,结果是0或者1}if (j>0) {//计算完了,如果有进位,就放在预留的数组的首位。R[0]=j;} else {//无进位,就删除无用的首位元素。R.shift();}输出查看结果:trace(R.join (''));你也可以输出到文本框: Text3.text=R.join ('') 来自实践的体会 绝对原创的经验        作者:张志晨         2012.5.15

6

推荐信息