版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40818798/article/details/87789570
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例 1:
输入: 1
输出: true
解释: 20 = 1
示例 2:
输入: 16
输出: true
解释: 24 = 16
示例 3:
输入: 218
输出: false
一、递归法 //8ms
bool isPowerOfTwo(int n)
{
if(n<=0)
return false;
if(n==1)
return true;
if(n%2==0)
return isPowerOfTwo(n/2);
else
return false;
}
二、&位运算法 //8ms
-
2的幂 二进制形式表示为 1 10 100 1000 ......
-
2的幂-1 二进制形式表示为 0 01 011 0111 ......
-
执行按位&运算后,结果为 0 00 000 0000 ......
bool isPowerOfTwo(int n)
{
if(n<=0)
return false;
if(n==1)
return true;
if( n&(n-1)==0 )
return true;
else
return false;
}
三、循环判断法 //24ms
//排除各项特殊选项后,对剩余的 偶数做除以2处理,最终==1的即为2的幂
bool isPowerOfTwo(int n)
{
while(n>1 && n%2==0)
n/=2;
if(n==1)
return true;
return false;
}
四、移位运算法 //32ms
bool isPowerOfTwo(int n)
{
while(n>1&&n%2==0)
n = n >> 1;
if(n == 1)
return true;
return false;
}
五、因子判断法
- 求出32位有符号数时 2 的最大次幂,其他幂都是最大次幂的因子(能被整除)
bool isPowerOfTwo(int n)
{
if( n >= 1 && 2147483648 % n ==0)
return true;
return false;
}