除法不可用手工算法来计算,其基本思想是反复做减法,看从被除数里面最多能减去多少个除数,商就是多少。

除法函数:

  • 如果前者绝对值小于后者直接返回零
  • 做减法时,不需要一个一个减,可以以除数*10^n为基数来减
 function division(a, b) { /*输入两个字符串类型大数字*/

     a = a.toString();

     b = b.toString();

     var sign = '';

     if(a.indexOf('-') >= 0 && b.indexOf('-') < 0){

         sign = '-';

         a = a.substr(1);
}
else if(a.indexOf('-') < 0 && b.indexOf('-') >= 0){ sign = '-'; b = b.substr(1);
} if(a.indexOf('-') >= 0 && b.indexOf('-') >= 0){ a = a.substr(1); b = b.substr(1);
} if(compare(a,b) < 0){ /*绝对值a<b返回0*/ return 0;
} a = a.replace(/^0+/,''); b = b.replace(/^0+/,''); var divisionSub = function(x,y){ var returnRes = [0]; var xlen = x.length; var ylen = y.length; for(var i=0;i<xlen-ylen;i++){ if(compare(x,y + '0') >= 0){ y += "0"; returnRes.push(0);
}
} while(compare(x,y) >= 0){ returnRes[0] ++; x = subtraction(x,y);
} return {
remainder : x,
quotient : returnRes.join('')
}
} var divisionRes = '0'; var divisionSubRes = {
remainder: a,
quotient: '0'
} while(compare(divisionSubRes.remainder,b) >= 0){ divisionSubRes = divisionSub(divisionSubRes.remainder,b); divisionRes = addition(divisionRes,divisionSubRes.quotient); } return sign + divisionRes;
}
这样一来我们就已经有了大整数的四则运算的所有函数,可以将其封装起来,就成为了我们自己的一个简单的四则运算库。

代码详情可以查看github : https://github.com/yux357/my-code-kata/blob/master/arithmetic.js

如果喜欢我的文章,可以扫描二维码关注我的微信公众号

争取每天都分享一点我自己的开发和练习体验~
Code Kata:大整数四则运算—除法 javascript实现-LMLPHP

05-11 22:45