Тема 14. Системы счисления

14.02 Поиск цифр(-ы) числа

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела системы счисления
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#137634

Значение арифметического выражения

3⋅438 + 2 ⋅423 + 420 +3 ⋅45 + 44 + 1

записали в системе счисления с основанием 16. Сколько значащих нулей содержится в этой записи?

Показать ответ и решение

В задаче требуется посчитать количество значащих нулей в записи некоторого большого числа в шестнадцатеричной системе счисления. Сначала мы должны вычислить значение самого выражения: оно состоит из нескольких слагаемых, каждое из которых записано через степень числа 4. Например, первый член 3 ⋅438  означает, что берётся число  38
4  и умножается на 3, второй член    23
2⋅4  аналогично даёт     23
2 ⋅4  , затем добавляются  20
4  , 3 ⋅45  , 44  и 1. Все эти слагаемые складываются, и мы получаем итоговое число, которое сохраняем в переменной s. Далее мы должны преобразовать это число в систему счисления с основанием 16. Для этого мы используем строку alph = ’0123456789ABCDEF’, где последовательно записаны все символы, которые используются в шестнадцатеричной системе. После этого мы начинаем цикл, в котором берём остаток от деления текущего числа s на 16 (операция s % 16), чтобы найти последнюю цифру в шестнадцатеричной записи, и с помощью индексации обращаемся к соответствующему символу в строке alph. Так мы находим символ для текущей цифры и добавляем его в начало результирующей строки hexed. Затем делим число s нацело на 16 (операция s //= 16), чтобы отбросить уже найденную цифру, и продолжаем цикл, пока число не станет равным нулю. В итоге строка hexed будет содержать полную шестнадцатеричную запись исходного выражения. Последний шаг — подсчитать количество нулей в этой строке. Для этого используем метод hexed.count(’0’), который возвращает количество символов ’0’ в строке hexed. Полученное число и будет ответом задачи.

# Вычисляем значение выражения: складываем несколько степеней числа 4,
# умноженных на коэффициенты, и добавляем 1
s = 3 * 4 ** 38 + 2 * 4 ** 23 + 4 ** 20 + 3 * 4 ** 5 + 4 ** 4 + 1

# Строка, содержащая все символы шестнадцатеричной системы счисления:
# от "0" до "9" и далее "A", "B", "C", "D", "E", "F"
alph = "0123456789ABCDEF"

# Переменная для хранения шестнадцатеричной записи числа
hexed = ""
# Цикл, пока число s больше нуля
while s > 0:
    # Остаток от деления числа на 16 даёт индекс нужной цифры
    # Находим символ в строке alph и добавляем его в начало записи
    hexed = alph[s % 16] + hexed
    # Делим число нацело на 16, убирая последнюю цифру
    s //= 16

# Считаем количество нулей в строке hexed
print(hexed.count("0"))



Ответ: 15

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!