判断一个数是否是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 |
|
完美解决!!!
解析:
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次方/