Given an integer, write a function to determine if it is a power of two.
很简单的题目,但是可以有多种方法解决;
一,求log2(n)
用换底公式可以得到double res=log10(n)/log10(2);
判断res是否为零。此法可以判断各种 幂的问题
代码如下:
class Solution {
public:
bool isPowerOfThree(int n) {
double res = log10(n) / log10(3);
return (res - int(res) == 0) ? true : false;
}
};
二,判断二进制中1的个数
由 1:0001 2:0010 4:0100 8:1000 ........观察发现,2的整数幂的二进制形势只有一个非零,且为第一个位置
可以通过判断二进制下1的个数来判断
代码如下:
class Solution {
public:
bool isPowerOfTwo(int n) {
int count=0;
if(n<0)
return false;
while(n)
{
count++;
n=n&(n-1);
}
if (count!=1)
return false;
else
return true;
}
};
同样还有另外的方式:
bool isPowerOfTwo(int n) {
int count = 0;
while (n > 0)
{
count+=(n&0x01);
n>>=1;
}
return count==1;
}