|
C语言版在后面的帖子里
可以进行和不大与100位的整数加法运算
(从数字逻辑课上的全加器得到启发)
函数:fullAdd(a,b,c)全加函数,返回一 Object {s:0 ,c:0}
hiAdd(a:String,b:String)为运算接口
实现小数算法也不是很难,只要加几个判断即可
减法,乘法,除法,都可以用数字逻辑上的原理来实现
[code]/* 高精度算法
(从数字逻辑课上的全加器得到启发)
函数:fullAdd(a,b,c)全加函数,返回一 Object {s:0 ,c:0}
hiAdd(a:String,b:String)为运算接口
实现小数算法也不是很难,只要加几个判断即可
减法,乘法,除法,都可以用数字逻辑上的原理来实现*/
//var fullAddRet:Object = {s:0, c:0};
//trace(typeof(fullAddRet));
_global.sum=new Array(100);
var tmp:Object = {s:0, c:0};
function fullAdd(a:Number, b:Number, c:Number)
{
trace("a:"+a+" b:"+b+"c"+c);
a=Number(a);
b=Number(b);
s = a + b+c;
c = (s - s % 10)/10;
s %= 10;
tmp.s = s;
tmp.c = c;
trace("IN FULLADD S="+s);
trace("IN FULLADD C="+c);
}
function hiAdd(a, b)
{
trace("a:"+a+" b:"+b);
if (isNaN(Number(a)) or isNaN(Number(b)))
{
trace("a or b is not a Number!");
return 0;
}
trace(Number(a));
aLen = length(a);
bLen = length(b);
if (aLen != bLen)
{
if(aLen<bLen){
atmp=aLen;aLen=bLen;bLen=atmp;
atmp=a;a=b;b=atmp;
}
for(i=0;i<aLen-bLen;i++){b="0"+b;}
}
trace("b:"+b);
_global.b=b;
cRet=0;sRet=0;
trace("bLen:"+bLen);
trace("aLen:"+aLen)
for(i=0;i<aLen;i++){
pos=-(i+1);
ap=a.substr(pos,1);bp=b.substr(pos,1)
fullAdd(ap,bp,cRet);
//trace(tmp.s+" "+tmp.c)
_global.sum=tmp.s;
trace("sum[]="+sum)
cRet=tmp.c;
//trace("TMP.C="+tmp.c);
}
/*for(;i<aLen;i++){
pos=-(i+1);
ap=a.substr(pos,1);
fullAdd(ap,0,cRet);
_global.sum=cRet+tmp.s;
trace("just a sum[]="+sum);
cRet=tmp.c;
}*/
//trace("cRet:"+cRet)
if(cRet!=0){
_global.sum=cRet;
aLen++;
trace(aLen);
}
return aLen;
}
_global.a="5502332434454353453454325324544345344353455345453543534534534532034";
_global.b="5505243545354353452436264554453453453453345453345345353245345345046";
lens=hiAdd(a,b);
var p:String=new String("");
for(i=0;i<lens;i++){
trace(_global.sum[lens-1-i]);
p=p+String(_global.sum[lens-1-i]);
}
trace(" "+a);
trace(" + "+b);
trace("---------------------------------------------------------------------------------");
trace(" = "+p)
/*****************************************************
* *
* 加法终于完成了! *
* *
******************************************************/ [/code]
[[i] 本帖最后由 iptton 于 2007-4-21 23:18 编辑 [/i]] |
|