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>
7 Réponses :
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.
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
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] )
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]))
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)
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
Vous pouvez utiliser la méthode bin ()
def decimalToBinary(n): return bin(n).replace("0b","")
Je tiens ce lien vous donne ce que vous cherchez: codereview.stackexchange. com / questions / 134154 /…
et si votre nombre est négatif?