写在前面
- 移位运算
- 刷题笔记作为后续参考
题目详情
给定一个整数 (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;
}
};
- 参考文章
- 342. 4的幂 C++
- 342. 4的幂