题目描述:
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。
示例 1:
输入: 16
输出: true
示例 2:
输入: 5
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
解法:
class Solution {
public:
// method 1:
bool isPowerOfFour1(int num){
if(num <= 0){
return false;
}else{
while(num % 4 == 0){
num >>= 2;
}
return num == 1;
}
}
// method 2:
bool isPowerOfFour2(int num){
if(num <= 0){
return false;
}else{
// 100
// 10000
// 1000000
long long max_val = pow(2, 32);
long long odd_ones = 0xaaaaaaaa;
// first, num must have single '1';
// second, the '1' must be at odd position (from right to left)
if(max_val%num == 0 && (num & odd_ones) == 0){
return true;
}else{
return false;
}
}
}
bool isPowerOfFour(int num) {
// return isPowerOfFour1(num);
return isPowerOfFour2(num);
}
};