Joven hacker sonriendo

Contando unos de un decimal, en el sistema binario

"Unos" en el Sistema Binario

Cuando hablamos de contar los "Unos" de un número decimal, no hablamos expresamente de contar los números "unos decimales" que aparecen en este número, a menos que se diga lo contrario estamos hablando de la cantidad de "unos" de este número pero en su representación binaria. El sistema binario es muy utilizado en la informática, se llama binario porque solo usa dos tipos de dígitos, el "1" o el "0".(Ver Referencias).

Por ejemplo el número 4 en binario es: 100 → solo tiene un solo "uno".

Por ejemplo el número 7 en binario es: 111 → tiene en total tres "unos".

En el reto de hoy, tenemos que diseñar e implementar un programa que tome un número en sistema decimal y que cuente la cantidad de "unos" que tiene en su representación binaria.

Reto en CodeEval 16

Nos dan varias líneas, cada una con un número Decimal, el objetivo es contar los "unos" de este número representado en binario.

Entrada:

10

22

56

Salida:

2

3

3

Implementación de código

El código en lenguaje ruby queda de la siguiente manera:

  • Leemos cada nueva línea de texto:

test.py
1
2
class Number_ones
File.open(ARGV[0]).each_line do |line|
  • Tomamos la línea de texto y la pasamos a entero con la función to_i, guardamos esta información en la variable num_dec:

1
    num_dec = line.to_i
  • Tomamos la variable num dec y la convertimos en un string (cadena de caracteres) en binario con la función to_s(2):

1
    num_bin = num_dec.to_s(2)
  • Ya tenemos nuestro número en binario, inicializamos un contador llamado count:

1
    count = 0
  • Vamos a iterar cada carácter de la variable num_bin, si el carácter es igual a 1, incrementamos en uno el contador:

1
2
3
4
5
     num_bin.each_char { |c|
          if (c == '1')
               count += 1
          end
     }
  • Ponemos al final el contador con su valor final

1
2
3
     puts count
     end
end

Foto del autor

Alejandro Aguirre Soto

Ingeniero mecatrónico, Escuela de Ingeniería de Antioquia, Maestría en Simulación de sistemas fluidos, Arts et Métiers Paristech, Francia, Java programming specialization, Duke University , USA

Apasionado por el conocimiento, el arte y la ciencia.


Relacionado





Haz un comentario