算法思想:
方法一:做位移运算,然后判断移位后的值是否与给定的数相等。时间复杂度为O(log n)
方法二:从二进制的表示可以看出,如果一个数是2的n次方,那么这个数对应的二进制表示中只有一位是1,其余位都为0。因此,判断一个数是否为2的n次方可以转换为这个数对应的二进制表示中是否只有一位为1。如果一个数的二进制表示只有一位是1,例如num=00010000,那么num-1的二进制表示为num-1=00001111,由于num与num-1二进制表示中每一位都不相同,因此num&(num-1)的运算结果为0,可以利用这种方法来判断一个数是否为2的n次方。
方法一代码如下:
package com.haobi;
/*
* 如何判断一个数是否为2的n次方
*/
public class Test2 {
public static boolean isPower(int n) {
if(n<1)
return false;
int i=1;
while(i<=n) {
if(i==n)
return true;
i <<= 1;//用1做位移操作
}
return false;
}
public static void main(String[] args) {
System.out.println(isPower(4));
System.out.println(isPower(6));
}
}
程序输出结果如下:
true
false
方法二代码如下:
pa