package AboutMove;
//判断是否为2的次方
public class AboutMove {
public static Boolean Judge(int n)
{
if(n<1)
return false;
int i=1;
while(i<=n)
{
if(i==n)
return true;
i<<=1;
}
return false;
}
public static void main(String[] args) {
int n=6;
System.out.println(Judge(n));
}
}
注意点千万不能在第15行写成n>>=1;因为6/2=3;3/2=1这是整形
时间复杂度为O(logn)
算法改进,由于一个数是2的N次方可以转换为这个数对应的二进制表示中是否只有一位为1.如果一个数的二进制表示只有一位是1,例如n=0010000,那么num-1的二进制表示为num-1=0001111,由于num与num-1二进制表示中每一位都不相同,因此num&(num-1)的运算结果为0,可以利用这种方法来判断一个数是否为2的N次方。
改进后代码
public static Boolean ChangeJudge(int n)
{
if(n<1) return false;
int m=n&(n-1);
return m==0;
}
public static void main(String[] args) {
int n=6;
System.out.println(ChangeJudge(n));
}