Системы счисления в ЕГЭ по информатике: как решать задание 14 с помощью Python

· 3 мин чтения · Редакция Skill Unit

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

Что уже умеет Python

Для двоичной, восьмеричной и шестнадцатеричной систем есть готовые функции. Для остальных оснований пригодится небольшая своя функция.

Python перевод в любую систему
print(bin(37), oct(37), hex(255))      # 0b100101 0o45 0xff
print(int("1A", 16), int("101", 2), int("z", 36))   # 26 5 35

def to_base(n, base):
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if n == 0:
        return "0"
    s = ""
    while n > 0:
        s = digits[n % base] + s
        n //= base
    return s

print(to_base(100, 7))   # 202
print(to_base(255, 16))  # FF

Проверка здравого смысла: число 100 в семеричной системе записывается как 202, потому что 2·49 + 0·7 + 2 = 100. Всегда проверяйте функцию на таком примере, прежде чем решать задачу.

Задача 1. Сколько цифр 2 в троичной записи

Значение выражения 9^7 + 3^11 − 40 записали в троичной системе счисления. Сколько цифр 2 содержится в этой записи?

Python подсчёт цифры
x = 9**7 + 3**11 - 40
s = to_base(x, 3)
print(x, s)          # 4960076 100022222221112
print(s.count("2"))  # 8

Ответ: 8. Функция count считает, сколько раз символ встречается в строке. Если спросят про сумму цифр, замените её на sum(int(c) for c in s).

Задача 2. Найти основание

В системе счисления с основанием N число 84 записывается как 150. Найдите N.

Python поиск основания
for N in range(6, 37):
    if 1 * N * N + 5 * N + 0 == 84:
        print(N)   # 7

Ответ: 7. Диапазон начинается с 6, потому что в записи есть цифра 5, а цифра 5 допустима только при основании не меньше 6. Такое ограничение нужно проверять в каждой задаче.

Задача 3. Последняя цифра

Для каких оснований N от 6 до 36 запись числа 2025 оканчивается цифрой 5? В ответе укажите наибольшее такое N.

Python последняя цифра
ok = [N for N in range(6, 37) if 2025 % N == 5]
print(ok, max(ok))   # [10, 20] 20

Последняя цифра числа в системе с основанием N равна остатку от деления на N. Поэтому условие превращается в 2025 % N == 5. Ответ: 20.

Задача 4. Сколько нулей в двоичной записи

Сколько нулей в двоичной записи значения выражения 4^6 + 2^9 − 7?

Python нули в двоичной записи
y = 4**6 + 2**9 - 7
b = bin(y)[2:]        # срез убирает приставку 0b
print(y, b)           # 4601 1000111111001
print(b.count("0"))   # 5

Ответ: 5. Обратите внимание на срез [2:]: без него в строку попадёт приставка 0b, и если считать единицы, ответ будет неверным.

Типичные ошибки

  • Забыли, что цифра в записи не может быть больше или равна основанию.
  • Считают в строке приставку 0b, 0o или 0x.
  • Путают порядок аргументов: int(строка, основание), а не наоборот.
  • Берут диапазон оснований без учёта максимальной цифры в записи.
  • Не проверяют функцию перевода на простом примере.

Как тренироваться

Сначала напишите функцию перевода сами и проверьте её на пяти числах, ответ для которых легко найти руками. Затем решите десять задач одного типа, меняя только условие. Только после этого переходите к заданиям из демоверсии и открытого банка ФИПИ.

В курсе «ЕГЭ по информатике» этой теме посвящён отдельный урок: с примерами, проверкой ответов и разбором ошибок. Первые уроки бесплатные.

Хотите пройти путь на практике?

Курс «ЕГЭ по информатике»: короткие уроки, практические задания и проверка ответов. Первый урок бесплатно.

Смотреть курс