Десятичный в двоичный алгоритм Python - PullRequest
1 голос
/ 13 октября 2019

Я пытаюсь создать алгоритм, который преобразует десятичные числа в двоичные. Я не могу использовать встроенную функцию в Python для этого. Это то, что у меня есть.

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)

Я полностью согласен с тем, что цифры 1 и 0 печатаются в отдельной строке, если они правильные.

Ответы [ 7 ]

1 голос
/ 13 октября 2019

Это должно быть:

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

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

Также обратите внимание, что при этом будет напечатан двоичный файл в обратном порядке.

Для ввода 6вывод будет:

0
1
1

Not:

1
1
0

Если вы хотите более поздний вариант, вы можете сначала сохранить его в списке, а затем распечатать список в обратном порядке. заказ.

0 голосов
/ 13 октября 2019

Вы можете использовать метод bin ()

def decimalToBinary(n): 
    return bin(n).replace("0b","") 
0 голосов
/ 13 октября 2019

Используйте bin, если вы хотите простой метод и чистый код, вот мой код

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

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

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

А затем используйте '\n'.join(...), чтобы напечатать все числа для каждой строки

0 голосов
/ 13 октября 2019

Вы можете выполнить деление и по модулю за один шаг:

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

Это, по сути, ядро ​​всех ответов. Но он ничего не печатает при n = 0. И странные вещи случаются при отрицательном n. Давайте разберем все целые числа:

Полная программа (без перестановки цифр) может выглядеть так:

if n == 0:
    print(0)
elif n < 0:
    print('-')
    n = -n
while n:
    n, d = divmod(n, 2)
    print(d)
0 голосов
/ 13 октября 2019

Вы можете просто сделать так:

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


пример вывода 1:

Enter a number
10
1010

пример вывода 2:

Enter a number
99
1100011
0 голосов
/ 13 октября 2019

Это работает довольно хорошо, возвращает строку, и это отдельная функция, поэтому вы не загрязняете свой код:

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

Результат:

>>> int2bin(4)
'100'
0 голосов
/ 13 октября 2019

Если вы хотите отслеживать, что происходит, добавьте несколько отпечатков и свой двоичный результат, куда вы его сохраняете? Я предлагаю str, может быть список int, я не знаю, но это один из способов (используя вашу логику в качестве основы):

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

binary = ""
while n > 1:
    rest = n % 2
    n //= 2
    print("rest: {}".format(rest), "step: {}".format(n))
    binary = str(rest) + binary  
if(n>=1):
  binary ="1" + binary  

print(binary)

пример:

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
...