Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
Credits:
Special thanks to @yukuairoy for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
关键是怎么能不用循环
(num &(num-1)) == 0,这个可以用来判断是不是2的power,两次应用就可以了
当然,还可以直接
num & 0x55555555 == num
0x~~~这个要用的熟练!
class Solution(object):
def isPowerOfFour(self, num):
if num <= 0:
return False
if (num &(num-1)) == 0:#判断是不是2 的power,以及根号下num,是不是2的power
#也可以这样num & 0x55555555 == num
t = (num ** 0.5)
if round(t) == (t):
t = int(t)
return t&(t-1) == 0
return False
'''
return (num | (num >> 2)) == (num + (num >> 2))
print (num + (num >> 2)),(num | (num >> 2)),num
res = 1
while res < (2 << 31):
if num == res:
return True
res = res << 2
return False
'''