写在前面

  • 移位运算
  • 刷题笔记作为后续参考

题目详情

给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。

示例 1:
输入: 16
输出: true

示例 2:
输入: 5
输出:

ac代码

  • ​F1:移位+取余​
class Solution {
public:
bool isPowerOfFour(int num) {
return (num>0) && ((num & (num-1)) == 0) && (num%3 == 1);
}
};
  • ​F2:移位​
  • 1.4的幂的二进制位1都在奇数位上。
  • 2.判断是否num大于0,再判断是否是2的幂,因为是4的幂就一定是2的幂,在与0xAAAAAAAA想与,其二进制上所有偶数位均为1。
  • 3.以上条件均成立表示该数是4的幂。
  • ​注意运算符号优先级!!!​
class Solution {
public:
bool isPowerOfFour(int num) {
return (num > 0) && ((num & (num - 1)) == 0) && ((num & 0xAAAAAAAA) == 0);
}
};
  • ​F3:数乘循环​
class Solution {
public:
bool isPowerOfFour(int n)
{
for(long res=1; res<=n; res*=4)
{
if(res==n)
return true;
}
return false;
}
};
  • 参考文章