Системы счисления (bin, oct, hex, int) в Python для ЕГЭ/ОГЭ: шпаргалка и примеры | СмартКИМ
СмартКИМ УДОБНАЯ ПОДГОТОВКА К ЕГЭ И ОГЭ
Все разборы Решать в тренажере Войти в СмартКИМ
ЕГЭ (1–27) ОГЭ (1–15) Python: шпаргалка
Быстрый переход по номерам и темам
Базовый синтаксис Время: 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].

Лайфхаки на экзамене

  1. В Python длинная арифметика работает из коробки: можно вычислять числа вроде 5**2026 - 3**1000 без переполнения памяти!
  2. Для подсчёта нулей в двоичной записи используйте bin(n)[2:].count('0').
Все разборы заданий Открыть в тренажере СмартКИМ