我是Java语言的新手,我需要功能方面的帮助。我创建了以下程序:https://codepen.io/aareval4/pen/dyYyoLp。而不是手动插入2的幂的值的数字,
例如:if(countblack == 1 || countblack == 5 || countblack == 13)
我想做的是创建一个公式,以检查总计数是否为2的幂,以便可以将总和加起来。
非常感谢您的帮助。
li
答案 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。