多语言展示
当前在线:315今日阅读:142今日分享:25

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

分割字符到数组 与其它语言如VB、C++不同的地方是:数的最高在数组首位!!!var X:Array=[];var Y:Array=[];for (var i:int =long; i>0; i--) {X[i-1]=A.charAt(i-1);//字符在字符串中最大索引值比个数少1Y[i-1]=B.charAt(i-1);}与加法不同的是,减法数组首位不预留空位,因为减法没进位,但有退位。

5

模拟数组对应元素相减,要考虑退位 var R:Array=[];for (i=long; i>0; i--) {if(Number(X[i-1])

6

去掉最高位的'0' s=true;//去掉最高位的'0'while (s) {if(R[0]==0) {//如果最高位有0R.shift();}else {s=false;//没有0,退出程序}

7

处理结果为负数的情况if (sign=='-') {R.unshift('-');}

8

输出结果 trace(R.join (''));你也可以输出到文本框。Text3.text=R.join ('')  来自实践的体会 绝对原创的经验       作者:张志晨     2012.5.16

推荐信息