5.01 Запись числа в двоичной системе счисления
Ошибка.
Попробуйте повторить позже
Автомат обрабатывает натуральное число по следующему алгоритму:
1) Строится восьмибитная двоичная запись числа .
2) Инвертируются разряды исходного числа (0 заменяется на 1, 1 на 0).
3) К полученному двоичному числу прибавляют единицу.
4) Полученное число переводится в десятичную систему счисления.
Для какого числа N результат работы алгоритма равен 130?
Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с
естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью
функции bin, при чём нас интересует восьмибитная двоичная запись, в ней всегда 8 символов, если меньше - нужно
добавить в начало нули (например, 111 -> 00000111). Количество необходимых нулей вычисляется по формуле: 8 - длина
двоичной записи. Далее создаём пустую строку, в которой сохраним инвертированное число. Проходимся по каждой цифре
двоичной записи, если встретили 1, добавляем в новую строку 0 и наоборот. Единицу удобнее добавить после
перевода в десятичную запись, так и сделаем, после чего сравним полученное число с 130 и выведем N, если это
так.
for i in range(1, 128): # Перебор значений N от 1 до 127 s = "0" * (8 - len(bin(i)[2::])) + bin(i)[2::] # Добавляем необходимое количество нулей в начало, чтобы запись имела 8 бит (цифр) x = "" # Строка для хранения инвертированной записи for j in range(len(s)): # Проходимся по каждому индексу if s[j] == "1": # Получаем цифру по индексу j и сравниваем с 1 # Если встречаем 1, добавляем 0 и наоборот x += "0" else: x += "1" if (int(x, 2) + 1) == 130: # Добавляем единицу и сравниваем с нужным числом print(i) # Выводим ответ
Аналитическое решение:
Необходимо найти такое , что после работы алгоритма мы получим 130. Давайте размотаем алгоритм с конца: в
конце алгоритм добавляет единицу, а значит отнимём её и получим число
. В 2 СС это число выглядит так
. Инвертируем биты обратно, получим число
, ведущий ноль не отбрасываем, так как алгоритм
строил восьмибитную(то есть состояющую из 8 цифр в двоичной СС) запись. Значит изначальное число равнялось
.
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!