number array javascript math

javascript - array - Separe un entero en dos sumandos



number javascript (11)

Sintiendo pereza ? No hay problema !

¡Ofrezco orgullosamente un objeto generador!

Inicialízalo y solo úsalo! ¡Cambiará automáticamente el valor de cualquier otro uso , incluso en la misma línea!

Uso: a = new splitter(n) luego console.log(a+" and "+a)

function splitter(n){ this.p1 = Math.floor(n/2); this.p2 = n-this.p1; this.cnt=0; this.valueOf= ()=> (++this.cnt%2)? this.p1:this.p2; return n; } a = new splitter(5); console.log(a + " and " +a); console.log(a + " and " +a); console.log(a + " and " +a); b = new splitter(11); console.log(b + " and " +b);

Necesito separar un entero en dos números. Algo así como dividir por dos, pero solo quiero componentes enteros como resultado, como por ejemplo:

6 = 3 and 3 7 = 4 and 3

Intenté lo siguiente, pero no estoy seguro de que sea la mejor solución.

var number = 7; var part1 = 0; var part2 = 0; if((number % 2) == 0) { part1 = number / 2; part2 = number / 2; } else { part1 = parseInt((number / 2) + 1); part2 = parseInt(number / 2); }

Esto hace lo que quiero, pero no creo que este código esté limpio.

¿Hay mejores formas de hacer esto?


Deja javascript do Math para ti.

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


O de esta manera :)

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


Otra forma de hacerlo es usar operadores bit a bit. No funciona para números muy grandes

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);


Si, en caso de que no desee que sus salidas sean consecutive o idénticas y desee "separar un número entero en dos números" , esta es la solución para usted:

function printSeparatedInts(num) { let smallerNum = Math.floor(Math.random() * Math.floor(num)); if (num && smallerNum === (num/2)) { // checking if input != 0 & output is not consecutive printSeparatedInts(num) } else { console.log(smallerNum, (num - smallerNum)) } } printSeparatedInts(22) printSeparatedInts(22) // will likely print different output from above printSeparatedInts(7)


Simplemente encuentre la primera parte y restela del número original.

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

En el caso de que x sea ​​impar, p1 recibirá el menor de los dos sumandos. Puede cambiar esto llamando a Math.ceil en Math.ceil lugar.


Su código se puede simplificar un poco:

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


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


var x = 11; var a = Math.ceil(x/2); var b = x-a; console.log("x = " + x + " , a = " + a + " , b = " + b);


var n = 7; var p1 = (n - (n % 2)) / 2; var p2 = (n + (n % 2)) / 2; console.log(p1, p2);


var number = 7; var part1 = 0; var part2 = 0; if(number == 0) { part1 = (part2 = 0); console.log(part1, part2); } else if(number == 1) { part1 = 1; part2 = 0; console.log(part1, part2); } else if((number % 2) == 0) { part1 = part2 = number / 2; console.log(part1, part2); } else { part1 = (number + 1) / 2; part2 = number - part1; console.log(part1, part2); }

Solo otra solución, creo que el rendimiento está bien.