Code Kata:大整数四则运算—除法 javascript实现

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

除法函数:

  • 如果前者绝对值小于后者直接返回零
  • 做减法时,不需要一个一个减,可以以除数*10^n为基数来减
 1 function division(a, b) { /*输入两个字符串类型大数字*/
 2 
 3     a = a.toString();
 4 
 5     b = b.toString();
 6 
 7     var sign = '';
 8 
 9     if(a.indexOf('-') >= 0 && b.indexOf('-') < 0){
10 
11         sign = '-';
12 
13         a = a.substr(1);
14     }
15     else if(a.indexOf('-') < 0 && b.indexOf('-') >= 0){
16 
17         sign = '-';
18 
19         b = b.substr(1);
20     }
21 
22     if(a.indexOf('-') >= 0 && b.indexOf('-') >= 0){
23 
24         a = a.substr(1);
25 
26         b = b.substr(1);
27     }
28 
29     if(compare(a,b) < 0){   /*绝对值a<b返回0*/
30 
31         return 0;
32     }
33 
34     a = a.replace(/^0+/,'');
35 
36     b = b.replace(/^0+/,'');
37 
38     var divisionSub = function(x,y){
39 
40         var returnRes = [0];
41 
42         var xlen = x.length;
43 
44         var ylen = y.length;
45 
46         for(var i=0;i<xlen-ylen;i++){
47 
48             if(compare(x,y + '0') >= 0){
49 
50                 y += "0";
51 
52                 returnRes.push(0);
53             }
54         }
55 
56         while(compare(x,y) >= 0){
57 
58             returnRes[0] ++;
59 
60             x = subtraction(x,y);
61         }
62 
63         return {
64             remainder : x,
65             quotient : returnRes.join('')
66         }
67     }
68 
69     var divisionRes = '0';
70 
71     var divisionSubRes = {
72         remainder: a,
73         quotient: '0'
74     }
75 
76     while(compare(divisionSubRes.remainder,b) >= 0){
77 
78         divisionSubRes = divisionSub(divisionSubRes.remainder,b);
79 
80         divisionRes = addition(divisionRes,divisionSubRes.quotient);
81 
82     }
83 
84     return sign + divisionRes;
85 }
这样一来我们就已经有了大整数的四则运算的所有函数,可以将其封装起来,就成为了我们自己的一个简单的四则运算库。

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




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


争取每天都分享一点我自己的开发和练习体验~
qrcode_for_gh_a80ae0bf035f_344

 
posted @ 2017-12-13 23:54  GuJinYu  阅读(905)  评论(0编辑  收藏  举报