📋 Системы счисления

Информатика | ЕГЭ 2026 | Задача


Запись чисел в различных системах счисления

Задача

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

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

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

Анализ условия

Формулировка задания предлагает простой алгоритм решения задачи с помощью программы:

  • построить шестнадцатеричную запись заданного числа в виде символьной строки;
  • определить, сколько символов 0 в этой строке.

К счастью, на каждом из этих шагов мы сможем использовать стандартные функции Python.

Решение

Найдём значение заданного арифметического выражения:

n = 3*4**38 + 2*4**23 + 4**20 + 3*4**5 + 2*4**4 + 1
print( n )

Напомним, что оператор ** в программе на Python означает возведение в степень.

Для перевода числа в шестнадцатеричную систему счисления можно применить f-строку:

h = f"{n:x}"

или встроенную функцию hex:

h = hex(n)[2:]

Функция hex возвращает символьную строку, где первые два символа — "0x" — обозначают, что далее записано число в шестнадцатеричной системе счисления. Срез [2:] удаляет эти два символа, так что символьная строка h содержит «чистую» шестнадцатеричную запись числа n.

Теперь можно применить метод count для символьных строк. Он определяет, сколько раз входит указанный символ (или подстрока) в основную строку, для которой он вызывается. Для вызова метода в Python используется точечная запись:

print( h.count('0') )

После выполнения этого фрагмента мы увидим, что строка h содержит:

15 символов «0»

Обсуждение решения

У нас получилось такое короткое решение только благодаря тому, что у символьных строк в Python есть метод count, который мы использовали. Если бы такого метода не было, пришлось бы выполнить цикл по всем элементам строки и с помощью дополнительной переменной count подсчитать количество нулей.

Классический вариант, который можно применить в большинстве языков программирования, — это перебор индексов всех символов строки:

count = 0
for i in range(len(h)):
    if h[i] == '0':
        count += 1
print( count )

Заголовок цикла, в котором вызываются функции range и len, выглядит запутанно, и лучше сразу перебирать сами символы строки h, а не их индексы:

count = 0
for c in h:
    if c == '0':
        count += 1
print( count )

В этой задаче для перевода числа в шестнадцатеричную систему счисления мы применили готовые инструменты Python. Для всех систем счисления, кроме двоичной, восьмеричной и шестнадцатеричной, такой возможности нет.

Решение без встроенных функций

Решим задачу без использования встроенных функций. В этом случае перевод в шестнадцатеричную систему придётся выполнять вручную с использованием цикла. Применим общий алгоритм: деление числа на 16 и составление результата из остатков от такого деления. Заметим, что вся шестнадцатеричная запись нам не нужна — интересуют только цифры 0 в ней. Поэтому мы будем просто считать, сколько остатков, равных нулю, получится при выполнении алгоритма:

count = 0
while n > 0:
    if n % 16 == 0:
        count += 1
    n //= 16
print( count )

Символьная строка, содержащая шестнадцатеричную запись, здесь не строится, так как в этом нет необходимости.

Этот подход можно использовать для систем счисления с любыми основаниями.

🧮 Интерактивная проверка

Введите арифметическое выражение (можно использовать ** для возведения в степень) и выберите основание системы счисления — сервис покажет запись числа и посчитает нули.

Нажмите «Вычислить», чтобы увидеть результат.

Поддерживаются операции: +, -, *, /, //, %, **, а также целые числа.

Page 1 of 1