Determina si un número es 2 elevado a k

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:

  1. 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次方");
        }
    }

}

Supongo que te gusta

Origin blog.csdn.net/weixin_43815275/article/details/112442660
Recomendado
Clasificación