5.02 Запись числа в другой системе счисления
Ошибка.
Попробуйте повторить позже
Автомат обрабатывает натуральное число N < 256 по следующему алгоритму:
1) Строится восьмибитная двоичная запись числа N.
2) Инвертируются все разряды исходного числа, кроме последней единицы и стоящих за ней нулей (0 заменяется на 1, 1 на 0).
3) Полученное число переводится в десятичную систему счисления.
Для какого значения N результат работы алгоритма равен 98?
В данной задаче мы имеем дело с обработкой восьмибитной двоичной записи числа N, где N — натуральное число меньше 256. Для каждого такого числа сначала строится строковое представление в двоичной системе длиной ровно 8 символов с помощью функции bin и дополнением нулями слева. Далее происходит инвертирование разрядов — то есть замена 0 на 1 и 1 на 0 — но не для всех символов подряд. Мы инвертируем все разряды, начиная с начала строки, до момента, пока не достигнем последней единицы в двоичной записи (и вместе с ней и следующими за ней нулями, то есть до конца строки). Для поиска этой позиции мы в цикле по символам двоичной строки проверяем, если текущий символ равен ’1’ и при этом справа больше нет единиц, значит мы достигли последней единицы, и с этого момента копируем оставшуюся часть строки без изменений. Все символы до этой позиции инвертируем. Полученную изменённую двоичную строку затем переводим обратно в десятичное число. После такого преобразования проверяем, равно ли полученное число 98. Перебирая все числа от 0 до 255, мы находим то число N, для которого результат работы алгоритма равен 98.
for number in range(256): # Перебираем все числа от 0 до 255 включительно binary_number = bin(number)[2:].zfill(8) # Получаем 8-битную двоичную запись числа number new_bin = ’’ # Инициализируем пустую строку для формирования новой двоичной записи for i in range(len(binary_number)): # Проходим по каждому разряду двоичной строки # Проверяем, что текущий символ равен ’1’ и справа нет больше единиц if binary_number[i] == ’1’ and binary_number[i+1:].count(’1’) == 0: new_bin += binary_number[i:] # Добавляем в результат оставшуюся часть без изменений break # Прекращаем инвертирование, т.к. достигли последней единицы else: # Если текущий символ равен ’1’, инвертируем его в ’0’ if binary_number[i] == ’1’: new_bin += ’0’ else: # Если текущий символ равен ’0’, инвертируем его в ’1’ new_bin += ’1’ decimal_result = int(new_bin, 2) # Переводим новую двоичную строку в десятичное число if decimal_result == 98: # Проверяем, равен ли результат 98 print(number) # Выводим исходное число, при котором результат равен 98
Специальные программы

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

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

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

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

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

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