1
votes

Algorithme python décimal à binaire

J'essaye de créer un algorithme qui convertit les décimales en binaire. Je ne peux pas utiliser la fonction intégrée en python pour le faire. Voici ce que j'ai.

n=int(input("enter a number"))

while n > 1:
    print(n%2)
    n //= 2
    if n % 2 ==0:
        print(n%2)
    else:
        print(n%2)

Je suis tout à fait d'accord avec les 1 et 0 imprimés sur une ligne séparée, tant qu'ils sont corrects.

p>


2 commentaires

Je tiens ce lien vous donne ce que vous cherchez: codereview.stackexchange. com / questions / 134154 /…


et si votre nombre est négatif?


7 Réponses :


1
votes

Cela devrait être:

1
1
0

Notez également que cela affichera le binaire dans l'ordre inverse.

Pour le input 6 , la sortie sera:

0
1
1

Pas:

n=int(input("enter a number\n"))

while n >= 1:    # Should be >= 1, not > 1.
    print(n%2)
    n //= 2
    # Removed if else.

Si vous le souhaitez le dernier, vous pouvez d'abord le stocker dans une liste, puis imprimer la liste dans l'ordre inverse.


0 commentaires

0
votes

Si vous voulez une trace de ce qui se passe, ajoutez quelques impressions et votre résultat binaire, où l'enregistrez-vous? Je propose un str, pourrait être une liste d'entiers, je ne sais pas, mais c'est un moyen (en utilisant votre logique comme base):

enter a number: <b>2045</b>    
 1. rest: 1 step: 1022
 2. rest: 0 step: 511
 3. rest: 1 step: 255
 4. rest: 1 step: 127
 5. rest: 1 step: 63
 6. rest: 1 step: 31
 7. rest: 1 step: 15
 8. rest: 1 step: 7
 9. rest: 1 step: 3
 10. rest: 1 step: 1

 11111111101

exemple:

XXX


0 commentaires

0
votes

Cela fonctionne assez bien, renvoie une chaîne, et c'est une fonction séparée, donc vous ne polluez pas votre code:

>>> int2bin(4)
'100'

Le résultat:

def int2bin( num ) :
    result = []
    while num :
        result.append( str(num & 1) )
        num >>= 1
    return ''.join( result[::-1] )


0 commentaires

0
votes

vous pouvez simplement faire comme ceci:

Enter a number
99
1100011


exemple de sortie 1:

Enter a number
10
1010

exemple de sortie 2:

n=int(input("Enter a number\n"))
res=""
while n >= 1:
  res=res+str(n%2)
  n //= 2
print(int(res[::-1])) 


0 commentaires

1
votes

Vous pouvez effectuer la division et modulo en une seule étape:

if n == 0:
    print(0)
elif n < 0:
    print('-')
    n = -n
while n:
    n, d = divmod(n, 2)
    print(d)

C'est fondamentalement le cœur de toutes les réponses. Mais il n'imprime rien pour n = 0. Et des choses étranges se produisent pour n négatif. Traitons tous les entiers:

Un programme complet (sans inverser les chiffres) peut ressembler à ceci:

while n:
    n, d = divmod(n, 2)
    print(d)


0 commentaires

0
votes

Utilisez bin , si vous voulez une méthode simple et un code propre, voici mon code

n = int(input('Input any Integer: '))

dim = str(bin(n)).split('0b', 1)[1].strip()

print('\n'.join([n for n in dim]))

Et puis utilisez '\ n'.join (...) pour imprimer tous les nombres pour chaque ligne


0 commentaires

0
votes

Vous pouvez utiliser la méthode bin ()

def decimalToBinary(n): 
    return bin(n).replace("0b","") 


0 commentaires