题目描述:
给定一个整数 (32位有符整数型),请写出一个函数来检验它是否是4的幂。
示例:
当 num = 16 时 ,返回 true 。 当 num = 5时,返回 false。
问题进阶:你能不使用循环/递归来解决这个问题吗?
题目分析:
如231题同样思路,还是通过位操作来解决这道
首先判断下输入为0和负数的情况
然后分析4的幂的特点0,4,16
化为二进制0,0100,00010000
跟求2的幂不同的是此处少了2,8
化为2进制 ,0010,00001000
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
4
8
我们尝试使用位操作将2,8过滤掉
解答代码:
C++版:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
class Solution { public: bool isPowerOfFour(int n) { if (n<=0) return false; return ((n&(n-1))==0 && ((n&0x55555555))); } };
Python版:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
class Solution: def isPowerOfFour(self, num): """ :type num: int :rtype: bool """ if num<=0: return False return ((num&(num-1))==0 and (bool(num&0x55555555)))