判断一个数是否是4的N次方

本文最后更新于:2023年3月30日 下午

前几天面试遇到一个问题,想了半天没想出来,后来用了最笨的方法写出来,就是利用递归,最后被告知运算速度太低。

回到家后百度了下,关于JS想找到一种高效的方法真的是不容易啊。

首先:
2的整数次幂的二进制数都为: (4)100、(16)10000、(64)1000000……另外,4的幂次方4n也可以写为2*2*n,即也可以写为2的幂次方,当然就满足2的幂次方的条件了,即num&(num – 1) === 0

思路:首先用条件num&(num – 1) === 0来判断是否为2的幂次方,若不满足,则不是;

1
2
3
function isFourN(num) {
return (!(num & (num-1)) && ((num % 10 === 4) || (num % 10 === 6))) || (num === 1);
}

完美解决!!!

解析:

1.!(num & (num - 1))

此步意思是:判断是否为2的幂次方;

2.(num%10 === 4) || (num % 10 === 6)

這句話的意思是:1的只是2的N次冪還不行,比如2^1 2^3 這樣的奇次冪,所以這句話的意思是排除2的奇次冪,只需要2的偶次冪即可,2的偶次冪即為%10為4或者6的數;

3.num === 1

這句話的意思是 4^0 === 1,那麼他也是4的N次冪,但是1條件已經排除了,所以單獨加上即可;


判断一个数是否是4的N次方
https://seven3.site/js/判断一个数是否是4的N次方/
作者
Seven3s
发布于
2015年8月25日
许可协议