Given an integer, write a function to determine if it is a power of two.(给定一个整数,判断其是否是2的幂)
1.个人分析
与判断是否是3的幂类似,普通解法就是不断地对输入的整数进行整除2,如果是2的幂则结果一定为1。
2.个人解法
bool isPowerOfTwo(int n)
{
if(n<1)
return false;
while(n%2 == 0){
n /= 2;
}
return n == 1;
}
3.参考解法
bool isPowerOfTwo(int n)
{
return (n >= 1) && ((n & (n-1)) == 0);
}
该解法使用了位运算,作为2的幂与自身减1后进行与运算一定为0,所以可以此作为判断依据;另外需要注意的是,如果n为0,n&(n-1)也为0,所以需要排除0,又因为n>0且n为整型,因此n>=1。
4.总结
在判断某个整数是否是某个数的幂时,通用的解法如下所示:
bool isPowerOfb(int n)
{
if(n<1)
return false;
while(n%b == 0){
n /= b;
}
return n == 1;
}
其中b为底数。但通常还存在其他的非迭代解法,比如这里的位操作解法,还有底数为3的整型上限解法或数学解法。
PS:
- 题目的中文翻译是本人所作,如有偏差敬请指正。
- 其中的“个人分析”和“个人解法”均是本人最初的想法和做法,不一定是对的,只是作为一个对照和记录。