es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Binario de un número. ¿Cómo verificar series iguales de dígitos?

Este es mi código. Lo que quiero hacer es convertir un número a su binario y si hay una serie de dígitos iguales, imprimir false; si no, imprimir true. Por ejemplo, si el número es 7, su binario es 111, debería imprimir false. Pero si el número es 10, su binario es 10000, lo que debería ser false; sin embargo, mi código imprime true y no sé dónde está mi error.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código que deben solucionarse para lograr el resultado deseado.

    En primer lugar, la función hasAlternatingBits() debe devolver un valor booleano en lugar de imprimir el resultado en la consola. Esto significa que la función debe tener un tipo de devolución de bool en lugar de void.

    En segundo lugar, el array a debe ser asignado dinámicamente con un tamaño igual al número de dígitos binarios en n, no con un tamaño de n. Esto se debe a que el número de dígitos binarios en n puede ser menor que el valor de n en sí mismo.

    En tercer lugar, el bucle que comprueba los bits alternos debe detenerse cuando llega al segundo al último dígito en el array, ya que comprobar a[i + 1] hará que el programa acceda a la memoria fuera de los límites del array.

    Por último, el bucle que comprueba los bits alternos debe devolver false tan pronto como encuentre un par de dígitos adyacentes que sean iguales. Si el bucle se completa sin encontrar un par de dígitos adyacentes que sean iguales, la función debe devolver true.

    Aquí está el código corregido:

    #include <iostream>
    using namespace std;
    
    bool hasAlternatingBits(unsigned n) {
        int numBits = 0;
        unsigned tmp = n;
        while (tmp > 0) {
            numBits++;
            tmp = tmp >> 1;
        }
    
        int* a = new int[numBits];
        int i;
        for (i = 0; n > 0; i++)
        {
            a[i] = n % 2;
            n = n / 2;
        }
    
        for (int i = 0; i < numBits - 1; i++) {
            if (a[i] == a[i + 1]) {
                delete[] a;
                return false;
            }
        }
    
        delete[] a;
        return true;
    }
    
    int main() {
        int n;
        cin >> n;
        cout << boolalpha << hasAlternatingBits(n) << endl;
        return 0;
    }
    

    En este código corregido, la función hasAlternatingBits() primero calcula el número de dígitos binarios en n y asigna dinámicamente un array a con un tamaño igual a ese número.

    Luego, la función rellena el array a con los dígitos binarios de n, comenzando desde el bit menos significativo.

    Después de eso, la función itera a través del array y comprueba pares de dígitos adyacentes que sean iguales. Si encuentra un par de dígitos adyacentes que sean iguales, devuelve inmediatamente false. Si completa el bucle sin encontrar dichos pares, devuelve true.

    Por último, la función main() llama a hasAlternatingBits(n) e imprime el valor booleano resultante.

Comments are closed.