Системы счисления в ЕГЭ по информатике: как решать задание 14 с помощью Python
· 3 мин чтения · Редакция Skill Unit
Задачи на системы счисления на экзамене почти всегда одного типа: надо перевести число, посчитать цифры в записи или найти основание. Руками это долго и легко ошибиться. Программа делает то же за секунду, поэтому достаточно один раз написать маленькую функцию и дальше только подставлять условие.
Что уже умеет 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 содержится в этой записи?
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.
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.
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?
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(строка, основание), а не наоборот.
- Берут диапазон оснований без учёта максимальной цифры в записи.
- Не проверяют функцию перевода на простом примере.
Как тренироваться
Сначала напишите функцию перевода сами и проверьте её на пяти числах, ответ для которых легко найти руками. Затем решите десять задач одного типа, меняя только условие. Только после этого переходите к заданиям из демоверсии и открытого банка ФИПИ.
В курсе «ЕГЭ по информатике» этой теме посвящён отдельный урок: с примерами, проверкой ответов и разбором ошибок. Первые уроки бесплатные.
Хотите пройти путь на практике?
Курс «ЕГЭ по информатике»: короткие уроки, практические задания и проверка ответов. Первый урок бесплатно.
Смотреть курс