Algún algoritmo en java que me pueda validar esto?

Quiero ver que el número que se ingresa sea sólo algunos de estos números

0 2 4 8 16 32 64 128 256 512 1024 y así...

No encontré la manera aún.

Probe usando math.log (valor)% math.log (2)==0

Pero no me da incorrecto a veces cuando es verdad.

1 respuesta

Respuesta

El error que cometes es pensar en división modular, no se trata de divinos modular, se trata de una progresión de Boole, o para simplificar potencias de 2, esto se valida de muchas maneras diferentes pero la más simple y la que mejor te aclarara las cosas es esta :

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int in;
        int potencia = 0;
        //bucle infinito para ir probando numeros 
        //del que se sale introduciendo 111
        while (true) {
            in = sc.nextInt();
            if (in == 111) {
                break;
            }
            //comprobamos potencias posibles y limitadas 
            //por el valor introducido
            while (Math.pow(2, potencia) < in) {
                potencia++;
            }
            //por ultimo validamos si el valor es exacto (256 y no 257)
            if (Math.pow(2, potencia) == in) {
                potencia = 0;
                System.out.println("OK");
            } else {
                potencia = 0;
                System.out.println("KO");
            }
        }
    }

Ten en cuenta las potencias (matemática básica) 2^0 = 1, x^0 = 1, por lo tanto, dependiendo de si quieres validar exactamente una secuencia como la que tienes deberías empezar las potencias por 1, y validar de forma adicional el 0 como entrada valida.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas