ЕГЭ, Python "Построение алгоритмов и практические вычисления"

Само задание:

Автомат обрабатывает натуральное число N (0 ≤ N ≤ 255) по следующему алгоритму:

  1. Строится восьмибитная двоичная запись числа N.
  2. Все цифры двоичной записи заменяются на противоположные (0 на 1, 1 на 0).
  3. Полученное число переводится в десятичную запись.
  4. Из нового числа вычитается исходное, полученная разность выводится на экран. Какое число нужно ввести в автомат, чтобы в результате получилось 111?

Пожалуйста объясните, что я сделал не так.

def f(N):
    n = bin(N)[2:]
    n = str.maketrans('01', '10')
    return int(n, 2)

for N in range (1, 255):
    if f(N) == 111:
        print(N)

Ответы (1 шт):

Автор решения: MBo

Вы забыли вычислить разность Из нового числа вычитается исходное, полученная разность

Кроме того, строки там вообще не нужны, биты можно инвертировать с помощью оператора "исключающего или" - xor (^). Вся функция:

def f(N):
    n = N ^ 255
    return N - n
→ Ссылка