AS3.0超大整数 加减乘除 工具类

package anUtil.Util
{
import flash.display.Sprite;



public  class BigIntUtil extends Sprite
{

private var Fristarray:Array=new Array();
private var Secondarray:Array=new Array();
//万为单位        万,亿,万亿,兆,万兆 ,亿兆,万忆兆,京                             9/9999/9999/9999/9999/9999/9999/9999/9999

/**
*精确到千万位 
*/
//array:Array,array2:Array
public function BigIntUtil()
{
// Fristarray=array;
// Secondarray=array2;
// Fristarray=ToArray("10");
// trace("============");
// Secondarray=ToArray("0.1030");
// var threearray:Array=jian(Fristarray,Secondarray);
// trace(ArrayToString(threearray));
}
/**
*把字符串类型的数字转换成数组 
*/
public static  function ToArray(number:String):Array
{   
//0,位数,1,小数,2 ,到千,3到千万,4到,
if(number){
trace("number",number);
var a:Array=number.split(".",10);
trace("a",a[0],a[1]);
var s:String=a[0];
var j:int=s.length;
var b:Array=new Array();
if(!a[1])a.push(0);
trace(a,s,j);
b.push(j);
b.push("0."+a[1]);
trace(a,s,j,b);
do{
if(j<8)
{
var ss:String;
ss=s.substr (0,j);
b.push(ss);
j=0;
}
else{
    j-=8;
       var sss:String;
       sss=s.substr (j,8);
b.push(sss);
trace(sss,"sss");
      }
   }

while(j>0);
return b;
}
else{
var b2:Array=new Array();
b2.push(0);
b2.push(0);
b2.push(0);
return b2;
}
}

/**
*把数组转换成字符串
*/
public static  function ArrayToString(array:Array):String{
var s:String="";
trace("array.length",array.length);
for(var c:int=array.length-1;c>1;c--)
{
if(array[c].length>8)
{
array[c]=array[c].slice(1);
}
s+=array[c];
trace("s",s);
}
if(array[1])
{
if(array[1]==0){s+=".0000"; }
else{
var a:Array=array[1].split(".",10);
s+="."+a[1];
 
}
}
return s;
}

/**
*任意两组规定格式的数组相加,可以通过ToString()方法取得
* 数组第一位为数字长度
* 数组第二位为小数
*/
public static  function jia(beijiashu:Array,jiashu:Array):Array
{
   var blen:Number=beijiashu[0];
var jlen:Number=jiashu[0];
var one:Array=new Array();
var two:Array=new Array();
var three:Array=new Array();
if(blen>jlen&&blen>8)
{
for(var i0:int=blen-jlen;i>0;i0-=8)
{
jiashu.push("00000000");
}
}
else if(jlen>blen&&jlen>8)
{
for(var i:int=jlen-blen;i>0;i-=8)
{
beijiashu.push("00000000");
}
}
for(var ii:int=1;ii<beijiashu.length;ii++)
{
var kk:Number=Number(beijiashu[ii]);
   one.push(kk);
}
for(var iii:int=1;iii<jiashu.length;iii++)
{ 
var qqc:Number=Number(jiashu[iii]);
two.push(qqc);
}
if(one.length>two.length){
for(var k:int=0;k<one.length;k++)
{
if(two[k]){
var  sum:Number=one[k]+two[k];
   three.push(sum);
}
else{
var  sum2:Number=one[k];
three.push(sum2);
}
}
}
else{
for(var k2:int=0;k2<two.length;k2++)
{
if(one[k2]){
var  sum3:Number=one[k2]+two[k2];
three.push(sum3);
}
else{
var  sum4:Number=two[k2];
three.push(sum4);
}
}
}
 
// trace(one[0]+" "+two[0]);
if(three[0]>=1)
{
three[1]+=1;
three[0]-=1;
}
var aa:Array=String(three[0]).split(".");
// trace(aa+"aaaa");
var ss:String=String(three[0]).slice(0,6);
// trace(ss+" ss");
three[0]=int(ss);
// trace(three+"three");
for(var x:int=1;x<three.length;x++)
{
if(three[x]>=100000000)
{
if(!three[x+1])
{
three.push(1);
 three[x]-=100000000;
}
else{
three[x+1]++;
    three[x]-=100000000;
}
}
}
var four:Array=new Array();
four[0]=three.length;
for(var q:int=1;q<three.length+1;q++)
{  var sss:String=""
for(var qq:int=7;qq>0;qq--){
if(Math.pow(10,qq)/three[q-1]>=1)
    {     
          sss+="0";
      }
else{break;}
}
var s:String="";
s=sss+String(three[q-1]);
     if(!four[q]){
//  trace(s);
 four.push(s)}
 else{four[q]=s;}
 
   }
// trace(four,"four");
cleanZero(four);
return four;
}

/**
*需要使用规定格式的数组,可以通过ToString()方法取得
*被减数必须大于减数 
* 数组第一位为数字长度
* 数组第二位为小数
*/
public  static function jian(beijianshu:Array,jianshu:Array):Array
{
var blen:Number=beijianshu[0];
var jlen:Number=jianshu[0];
var one:Array=new Array();
var two:Array=new Array();
var three:Array=new Array();

for(var i:int=blen-jlen;i>0;i-=8)
{
jianshu.push("00000000");
}

for(var ii:int=1;ii<beijianshu.length;ii++)
{
var kk:Number=Number(beijianshu[ii]);
one.push(kk);
}
for(var iii:int=1;iii<jianshu.length;iii++)
{ var qqb:Number=Number(jianshu[iii])
two.push(qqb);
}
if(one.length>two.length){
for(var k:int=0;k<one.length;k++)
{
if(two[k]){
var  sum:Number=one[k]-two[k];
three.push(sum);
}
else{
var  sum2:Number=one[k];
three.push(sum2);
}
}
}
else{
for(var k2:int=0;k2<two.length;k2++)
{
if(one[k2]){
var  sum3:Number=one[k2]-two[k2];
three.push(sum3);
}
else{
var  sum4:Number=two[k2];
three.push(sum4);
}
}
}
if(three[0]<0)
{
three[1]-=1;
three[0]+=1;
}
for(var x:int=1;x<three.length;x++)
{
if(three[x]<0)
{
three[x]+=100000000;
three[x+1]-=1;
}
}


var four:Array=new Array();
four[0]=three.length;
for(var qa:int=1;qa<three.length+1;qa++)
{  var ss:String=""

for(var qqa:int=7;qqa>0;qqa--){
if(Math.pow(10,qqa)/three[qa-1]>=1)
{     
ss+="0";
}
else{break;}
}
var s:String="";
s=ss+String(three[qa-1]);
if(!four[qa]){
four.push(s)}
else{four[qa]=s;}
}

cleanZero(four);
return four;
}
/**
* 需要使用规定格式的数组,可以通过ToString()方法取 得
* 乘数必须没有小数,即>=1
* 数组第一位为数字长度
* 数组第二位为小数
*/
public static  function cheng(beichengshu:Array,chengshu:Array):Array
{
var i:Array=chengshu;
var sum:Array=beichengshu;
var k:Array=ToArray("1");
   while(true)
{  

 sum=jia(sum,beichengshu);
 i=jian(i,k);
 if(int(ArrayToString(i))==1)
 {
 break;
 }
}

cleanZero(sum);
return sum;
}
/**
* 需要使用规定格式的数组,可以通过ToString()方法取得
* 除数必须没有小数,即>=1
* 只返回商,不返回余数
* 数组第一位为数字长度
* 数组第二位为小数
*/
public static  function chu(beichushu:Array,chushu:Array):Array
{
var i:Array=chushu;
var sum:Array=beichushu;
var k:Array=ToArray("1");
var c:Array=ToArray("0");
while(true)
{  
if(int(ArrayToString(sum))<int(ArrayToString(chushu)))
{break;}
sum=jian(sum,chushu);
c=jia(c,k);
if(int(ArrayToString(sum))<=0)
{
break;
}
}

cleanZero(c);
return c;
}
/**
*把前面的零全部清除 
*/
public static  function cleanZero(array:Array):Array
{
for(var i:int=array.length;i>1;i--)
{
var k:int=0;
k=int(array[i]);
if(k>0)
{
array[i]=String(k);
break;
}
else{
array.splice(i);
array[0]-=1;
}
}
return array;
}
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值