您的位置:首页 > 其它

[leetcode]: 342. Power of Four

2017-05-23 15:51 363 查看

1.题目

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.

给一个整数n,判断是否为4的幂

2.分析

之前已经做过了判断3的幂次方,2的幂次方。

求int32范围内最大的2的幂次方,3的幂次方,通过整除来判断的方法只适用于2和3这样的质数。

由于2的特殊性,所以可以通过bit位为1来判断。

4也很特殊。

1)4=2*2。所以对n开方,然后判断是否为2的幂次方也是可行的。

2)从bit位来看4的幂次方如1=0001,4=0100,16=0001,0000,64=0100,0000.

可以看到bit为1的位总是在每4位的0或3号位上。所以可以先判断n是否为2的幂,再判断是够满足为4的幂。

3.代码

public:
//开方
bool isPowerOfFour_1(int num) {
if (num <= 0)
return false;
if (num == 1)
return true;
auto x = sqrt(num);
if (fmod(x, 1) == 0 && !(int(x)&(int(x) - 1)))
return true;
return false;
}
//log
bool isPowerOfFour_2(int num) {
return fmod(log10(num)/log10(4),1)==0;
}
//bit判断
bool isPowerOfFour_3(int n) {
return n > 0 && (n&(n - 1)) == 0 && (n & 0x55555555);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode power