5.02 Запись числа в другой системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
1) Строится шестнадцатеричная запись числа , где «
» — операция деления нацело.
2) К этой записи дописывается еще три разряда по следующему правилу:
а) если не делится на 4, то слева к нему приписывается «
», а справа «
».
б) в противном случае слева приписывается «», а справа «
».
Например, .
Полученная таким образом запись (в ней на три разряда больше, чем в записи исходного числа ) является
шестнадцатеричной записью искомого числа
.
Укажите наибольшее число , для которого результат работы алгоритма меньше
. В ответ запишите это
число в десятичной системе счисления.
Для решения задачи нам необходимо перебрать все возможные значения N в убывающем порядке, начиная с 1 000 000, чтобы найти наибольшее такое N, для которого построенное по условию число R будет меньше 1 048 576 (это 2̂20). Для каждого значения N сначала вычисляем целочисленное деление на 2, затем преобразуем полученное число в шестнадцатеричную строку без префикса «0x». Далее, согласно условию, добавляем три символа к полученной строке: если N не делится на 4, то слева приписываем «f», а справа «a0», иначе слева приписываем «15», а справа «c». Полученная таким образом строка представляет собой шестнадцатеричное число R. После этого переводим строку обратно в целое число из шестнадцатеричной системы в десятичную и сравниваем с 1 048 576. Если R меньше этого значения, значит мы нашли нужное максимальное N, выводим его и завершаем цикл. Такой перебор гарантирует, что первое найденное значение будет максимальным подходящим числом.
for i in range(1_000_000, 0, -1): # Перебор чисел N от 1 000 000 до 1 включительно, в порядке убывания s = hex(i // 2)[2:] # Вычисляем N//2 и переводим в шестнадцатеричную строку без префикса ’0x’ if i % 4 != 0: # Если N не делится на 4 s = ’f’ + s + ’a0’ # Приписываем слева ’f’, справа ’a0’ else: # Если N делится на 4 s = ’15’ + s + ’c’ # Приписываем слева ’15’, справа ’c’ if int(s, 16) < 1_048_576: # Переводим строку в целое число из шестнадцатеричной системы и сравниваем с 2̂20 print(i) # Выводим найденное максимальное значение N break # Завершаем цикл, ответ найден
Специальные программы

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

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

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

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

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

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