Базовый синтаксис
Время: 5-10 мин
bin
oct
hex
int
кастомные СС
Системы счисления (bin, oct, hex, int)
Тема: Встроенные функции, перевод в n-ичные системы и подсчет цифр
Системы счисления — ядро Заданий №5, №14 ЕГЭ и №10 ОГЭ. Знание встроенных функций и универсального алгоритма перевода решает задачи за минуту.
1. Встроенные функции Python
bin(42)[2:]->'101010'(двоичная СС).oct(42)[2:]->'52'(восьмеричная СС).hex(42)[2:]->'2a'(шестнадцатеричная СС).int('101010', 2)->42(из 2-ичной в 10-ичную).int('2A', 16)->42(из 16-ричной в 10-ичную).
2. Универсальный алгоритм для любой системы счисления (Задание 14 ЕГЭ)
Чтобы перевести число $N$ в $P$-ичную систему счисления, делим число на $P$, собирая остатки от деления задом наперед:
def to_base(n, base):
if n == 0: return '0'
digits = []
while n > 0:
digits.append(str(n % base))
n //= base
return ''.join(digits[::-1])
Разновидности и прототипы задания на экзамене
1. Встроенные функции: bin(), oct(), hex()
Перевод в 2, 8, 16 СС с отсечением префиксов
[2:].2. Обратный перевод: int(s, base)
Перевод строки из любой СС (от 2 до 36) в десятичное число:
int('1A3F', 16).3. Универсальная функция перевода в n-ичную СС (3, 5, 7, 9...)
Алгоритм деления на основание с остатками.
Боевой шаблон решения на Python
Запустить код в онлайн-песочницеБоевой шаблон решения на Python
# === Шпаргалка: Системы счисления в Python ===
# 1. Универсальная функция перевода в СС с основанием от 2 до 36:
def to_base(n, base):
digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if n == 0: return "0"
res = ""
while n > 0:
res = digits[n % base] + res
n //= base
return res
# Пример: перевод в троичную, семеричную, 15-ричную СС:
print("Число 42 в 3-ичной СС:", to_base(42, 3))
print("Число 100 в 7-ичной СС:", to_base(100, 7))
# 2. Быстрый подсчет конкретной цифры в выражении (Задание 14):
val = 4**120 + 2**300 - 64
s_val = to_base(val, 4)
print("Количество троек в 4-ичной записи:", s_val.count('3'))
# 3. Перебор неизвестных цифр x в уравнении (Задание 14):
# Пример: 123x5_15 + 1x234_15 кратно 14
for x in range(15):
num1 = int(f"123{to_base(x, 15)}5", 15)
num2 = int(f"1{to_base(x, 15)}234", 15)
total = num1 + num2
if total % 14 == 0:
print("Подходящий x:", x, "Значение частного:", total // 14)
break
Типичные ошибки
✕ Не так
# ❌ Ошибка: Забыть срез [2:] у встроенных функций
bin(10) == '0b1010' # префикс '0b' испортит подсчет символов!
✓ Так
# ✅ Правильно: Всегда писать bin(10)[2:]
ГРОБ
ЛОВУШКА: Основания систем счисления больше 10 (буквы A, B, C...)
При ручном формировании остатков остаток 10 превратится в '10' (два символа) вместо буквы 'A'.
Как обойти
Используйте индексацию по строке
digits = '0123456789ABCDEF...': digits[n % base].Лайфхаки на экзамене
- В Python длинная арифметика работает из коробки: можно вычислять числа вроде
5**2026 - 3**1000без переполнения памяти! - Для подсчёта нулей в двоичной записи используйте
bin(n)[2:].count('0').