40 votes

Séparer un entier en deux parties (presque) égales

Je dois séparer un entier en deux nombres. Quelque chose comme une division par deux mais je ne souhaite que des composants entiers, tels que:

 6 = 3 and 3
7 = 4 and 3
 

J'ai essayé ce qui suit, mais je ne suis pas sûr que ce soit la meilleure solution.

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

Cela fait ce que je veux, mais je ne pense pas que ce code est propre.

Y a-t-il de meilleures façons de le faire?

107voto

coldspeed Points 111053

Il suffit de trouver la première partie et de la soustraire du nombre original.

 var x = 7;

var p1 = Math.floor(x / 2);
var p2 = x - p1;

console.log(p1, p2); 

Dans le cas où x serait impair, p1 recevront le plus petit des deux ajouts. Vous pouvez changer cela en appelant à la place Math.ceil .

38voto

Laissez javascript faire les maths pour vous.

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

8voto

arauf Points 487

Votre code peut être un peu simplifié:

 var num = 7;
var p1 = Math.floor(num / 2);
var p2 = p1;

if (num % 2 != 0) {
   p1++;
}
console.log(p1, p2); 

4voto

TheChetan Points 2131

Une autre façon de faire consiste à utiliser des opérateurs au niveau des bits. Cela ne fonctionne pas pour les très grands nombres

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

4voto

rm -rf star Points 1162

var num = 7;

var part1 = parseInt(num/2);
var part2 = num - part1;

console.log(part1, part2);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X