Determina si un número es 2 elevado a k (el valor de k no se considera aquí).
Con respecto a esta pregunta, primero debemos comenzar con la esencia de la pregunta: ¿Cuáles son las características del número de la k-ésima potencia de 2?
Primero, familiarícese con algunos comunes (la secuencia binaria correspondiente está entre paréntesis):
2 (10) 4 (100) 8 (1000) 16 (10000)
Descubrimos que estos números elevados a 2 tienen solo un 1 en la secuencia binaria.
Entonces empieza aquí. Introduzca los dos métodos siguientes:
- método uno
Idea: Mueva la secuencia binaria del número en i lugares a la derecha hasta encontrar el primer 1, y luego determine si el número es 1, si es 1, significa que la secuencia binaria del número tiene solo un 1, que es el número de veces de 2..
Código:
package shujiazuoye;
import java.util.Scanner;
/*
* 如何判断一个数是不是2的几次方
* */
public class AboutTwo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要判断的数字:");
int num=sc.nextInt();
aboutTwo(num);
}
private static void aboutTwo(int num) {
while((num&1)!=1){
num=num>>1;
}
if(num==1){
System.out.println("是2的k次方");
}else{
System.out.println("不是2的k次方");
}
}
}
2. Método 2
Idea:
Suponiendo que este número es n, si n & (n-1) es 0, entonces n es 2 elevado a k; suponiendo que n & (n-1) es 1, entonces n no es 2 elevado a k.
Código:
package shujiazuoye;
import java.util.Scanner;
public class AboutTwo1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入要判断的数字:");
int num=sc.nextInt();
aboutTwo(num);
}
private static void aboutTwo(int num) {
if(((num)&(num-1))==0){
System.out.println("是2的k次方");
}else{
System.out.println("不是2的k次方");
}
}
}