如何尽可能多地将一个数除以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 ==> 还有一个向右移动。
我想编写一个程序,读取一个整数,然后尽可能多地将它除以 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 ==> 还有一个向右移动。