Javascript检查2的幂

时间:2020-04-09 21:55:58

标签: javascript html

我是Java语言的新手,我需要功能方面的帮助。我创建了以下程序:https://codepen.io/aareval4/pen/dyYyoLp。而不是手动插入2的幂的值的数字,

例如:if(countblack == 1 || countblack == 5 || countblack == 13)

我想做的是创建一个公式,以检查总计数是否为2的幂,以便可以将总和加起来。

非常感谢您的帮助。

li

2 个答案:

答案 0 :(得分:2)

制作一个数组和一个从1开始的数字,然后从2迭代到所需的多次迭代。在每次迭代中,将2 ** i添加到数字,然后将数字推送到数组:

const arr = [1];
let num = 1;
for (let i = 2; i < 8; i++) {
  num += 2 ** i;
  arr.push(num);
}
console.log(arr);

然后您可以替换

if (countblack == 1 ||countblack == 5 ||countblack == 13 ||countblack == 29 ||countblack == 61 ||countblack == 125){

使用

if (arr.includes(countblack)){

答案 1 :(得分:0)

这是一种有效的方法:

让我们利用以下事实:两个的幂将全为“ 0”,而单个为“ 1”。

示例:

Decimal |   Binary
2       |   10
4       |   100
8       |   1000
16      |   10000
// this check
if (countblack == 1 ||countblack == 5 ||countblack == 13 ||countblack == 29 ||countblack == 61 ||countblack == 125)

// this can be used as a check
const isPowerOfTwo = (num) => {
  let binNum = (num).toString(2);
  let isValid = ((binNum.match(/1/g) || []).length === 1) && (binNum.length > 1);
  return isValid;
} 

// use the function like here 
console.log(isPowerTwo(16));

注意:(binNum.length > 1)之所以添加此检查,是因为1的二进制文件中还包含单个1。

相关问题