如何尽可能多地将一个数除以2,然后在Javascript中打印出来?

How to divide a number by 2 as many times as possible, and then print it out in Javascript?

我想编写一个程序,读取一个整数,然后尽可能多地将它除以 2,同时将该数字写为两个数字乘以一个不再能被 2 整除的数字的乘积。

例如:

我想要一个整数:120

120 = 2 * 2 * 2 * 15

这是我目前所了解的(我认为其中一部分已经很好,但不幸的是我卡在这里了):

let num = Number(prompt('The number: '));

let i = 0;
while(!(num % 2)) { 
    num /= 2; 
    i++; 
}

let solution = Array(i).fill(2).join(' * ');

console.log(solution);

我将采取几个步骤来达到您想要的结果:

  • 如果要在输出中显示它,请保留原始值(请参阅常量 initialNum 和可编辑的 remainder
  • 如果有余数,先压入数组再转成字符串

// Keep a copy of the original
const initialNum = Number(prompt('The number: '));
let remainder = initialNum

// This is working fine and doesn't need any changes
let i = 0;
while (!(remainder % 2)) {
  remainder /= 2;
  i++;
}

// Add the required "2"s
const values = Array(i).fill(2)
// If the total isn't completely divisible by 2, add the final multiplier
if (remainder !== 1) {
  values.push(remainder)
}
// Build the output string
const solution = `${initialNum} = ${values.join(' * ')}`;

console.log(solution);

你可以做到

let num = Number(prompt('The number: '))
let count = 0
let resp = num + ' ='

while (num > 0 && !(num & 1)) 
  {
  num >>=1
  count++
  }
resp += ' 2 *'.repeat(count)

if (count && [0,1].includes(num)) resp = resp.slice(0,-1)
else if (!count || num!==1 )      resp += ' '+ num

console.log(`count = ${count}\n${resp}`)

Explanations:

这是一个数学技巧,在计算机科学中,所有数字都用二进制表示。

在二进制中,所有偶数都以零结尾(并且可以被 2 整除);因此最后一位为1的ceut不能被2整除。
(同样以10为底,所有10的倍数都以0结尾。)

将二进制数除以 2 将始终对应于右移。
以十为底计算也是一样,除以十也是右移
例如:1230/10 = 123 ==> 还有一个向右移动。