Separate an integer into two (nearly) equal parts

后端 未结 11 878
囚心锁ツ
囚心锁ツ 2020-12-06 04:09

I need to separate an integer into two numbers. Something like dividing by two but I only want integer components as a result, such as:

6 = 3 and 3
7 = 4 and         


        
相关标签:
11条回答
  • 2020-12-06 04:35
    var n = 7;
    var p1 = (n - (n % 2)) / 2;
    var p2 = (n + (n % 2)) / 2;
    
    console.log(p1, p2);
    
    0 讨论(0)
  • 2020-12-06 04:36

    Another way to do this is using bitwise operators. It doesn't work for very big numbers

    function splitter(number){
      part1 = (number>>1) + (number&1);
      part2 = number>>1;
      console.log(number + ":", part1 + "+" + part2);
    }
    
    splitter(7);
    splitter(6);
    splitter(2**30+1); // Breaks for values greater than 2**31
    splitter(2**31+1); 

    0 讨论(0)
  • 2020-12-06 04:37

    Or this way :)

    var number = 7;
    var part1 = ~~((number / 2) + (number % 2));
    var part2 = ~~(number / 2);
    
    console.log(part1, part2);

    0 讨论(0)
  • 2020-12-06 04:39

    Just find the first part and subtract it from the original number.

    var x = 7;
    
    var p1 = Math.floor(x / 2);
    var p2 = x - p1;
    
    console.log(p1, p2);

    In the case of x being odd, p1 will receive the smaller of the two addends. You can switch this around by calling Math.ceil instead.

    0 讨论(0)
  • 2020-12-06 04:42

    var num = 7;
    
    var part1 = parseInt(num/2);
    var part2 = num - part1;
    
    console.log(part1, part2);

    0 讨论(0)
  • 2020-12-06 04:44

    Your code can be simplified a bit:

    var num = 7;
    var p1 = Math.floor(num / 2);
    var p2 = p1;
    
    if (num % 2 != 0) {
       p1++;
    }
    console.log(p1, p2);

    0 讨论(0)
提交回复
热议问题