给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
/*
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。
*/
public class Test1_ThePowerOf2 {
public static void main(String[] args) {
while (true){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入想输入的数字:");
// boolean b = Test1.judgeNumber(scanner.nextInt());
// boolean b = Test1.funV1(scanner.nextInt());
boolean b = Test1_ThePowerOf2.funV2(scanner.nextInt());
if (b){
System.out.println("输入的数字为2的次幂:"+b);
}else{
System.out.println("输入的数字不为2的次幂:"+b);
}
}
}
public static boolean judgeNumber(int number){
int flag=0;
if (number==1){
return true;
}else{
if (getResult(number,flag)){
return true;
}
return false;
}
}
public static boolean getResult(int number,int flag){
if (number == 0){
return false;
}
while(number%2==0){
number = number/2;
flag = number%2;
if (flag==0&&number==2||flag==1&&number==1){
return true;
}
}
return false;
}
public static boolean funV1(int a) {
int temp=1; //迭代变量,从1开始
while(temp <= a){
if(temp == a) { //当temp等于目标值就返回true
return true;
}
temp *= 2; //2次幂增长
}
return false; //没找到返回false
}
public static boolean funV2(int n){
return n > 0 && (n & (n - 1)) == 0;
}
}