Перевод числа в двоичную систему счисления, код на python выводит неверный ответ

Рейтинг: 0Ответов: 4Опубликовано: 24.07.2023

я написала код по задаче:

Напишите программу, которая по данным числам A и n записывает 
представление числа A в n-разрядном двоичном дополнительном коде.

Входные данные
Первая строка входных данных содержит число A, вторая строка –– число 
n, при этом 2 ≤ n ≤ 16, −2^n−1 ≤ A ≤ (2^n−1)−1 .

Выходные данные
Программа должна вывести строку из n символов, содержащих запись числа 
A в n-разрядном двоичном дополнительном коде, первый символ –– старший 
знаковый разряд.

Примеры
входные данные
3
8

выходные данные
00000011
входные данные
57
8

выходные данные
00111001

Мой код:

def binar(x, n): 
    ans="" 
    while x>0:
        ans+=str(x%2)
        x//=2
    ans="0"*(n-len(ans))+(ans[::-1])
    return ans 
A=int(input()) 
n=int(input()) 
print(binar(A, n))

Но на некоторых тестах проверяющей системы (они неизвестны) он выдаёт неправильный ответ, помогите пожалуйста!!!

Ответы

▲ 3Принят
def binar(x, n):
    ans = ""
    for i in range(n):
        ans = "01"[x%2] + ans
        x //= 2
    return ans

print(binar(10, 8))
print(binar(-10, 8))

00001010
11110110
▲ 1

Вряд ли у вас примут этот ответ. Встроенными средствами Python задачу можно решить так:

a = int(input())
n = int(input())
if a < 0:
    a += 2 ** n # дополнительный код для отрицательных чисел
print(f'{a:0{n}b}')
#      задаёт ширину поля (n символов)
#      |
#      v
#     ---
f'{a:0{n}b}'
#    -   -
#    ^   ^
#    |   |
#    |   задаёт двоичную систему счисления
#    | 
#    заполняет недостающие символы нулями
▲ 0

Легче переписать...

def f(x: int, n: int) -> str:
    return bin(x)[2:].zfill(n)

x = int(input())
n = int(input())
print(f(x, n))
▲ 0

Вы не учитываете отрицательные числа. Почитайте о дополнительном коде, например, на Википедии. Если придерживаться Вашего стиля, то следует добавить функцию для перевода отрицательных чисел:

def neg_binar(x, n):
    x = 2**n - abs(x)
    ans = ""
    while x:
        ans = str(x % 2) + ans
        x //= 2
    return ans


def binar(x, n):
    ans = ""
    while x > 0:
        ans += str(x % 2)
        x //= 2
    ans = "0" * (n - len(ans)) + (ans[::-1])
    return ans


A = int(input())
n = int(input())
if A >= 0:
    print(binar(A, n))
else:
    print(neg_binar(A, n))

Стоит отметить, что для положительных чисел можно использовать для перевода f-строки:

print(f'{A:0{n}b}')

или функцию bin():

print(bin(A)[2:].zfill(n))