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.
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 debool
en lugar devoid
.En segundo lugar, el array
a
debe ser asignado dinámicamente con un tamaño igual al número de dígitos binarios enn
, no con un tamaño den
. Esto se debe a que el número de dígitos binarios enn
puede ser menor que el valor den
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 devolvertrue
.Aquí está el código corregido:
En este código corregido, la función
hasAlternatingBits()
primero calcula el número de dígitos binarios enn
y asigna dinámicamente un arraya
con un tamaño igual a ese número.Luego, la función rellena el array
a
con los dígitos binarios den
, 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, devuelvetrue
.Por último, la función
main()
llama ahasAlternatingBits(n)
e imprime el valor booleano resultante.