Перевод СС функциями bin, oct, hex, int
Из десятичной в другую систему
В Python есть три готовые функции — для оснований 2, 8 и 16. Все они возвращают строку с префиксом:
| Функция | Пример | Результат |
|---|---|---|
| bin(n) | bin(25) | '0b11001' |
| oct(n) | oct(25) | '0o31' |
| hex(n) | hex(255) | '0xff' |
Префикс 0b, 0o, 0x почти всегда мешает — его убирают срезом [2:]:
1 2 3
Обратно в десятичную: int с основанием
Функция int() со вторым аргументом переводит строку из любой системы с основанием от 2 до 36:
1 2 3 4
Регистр букв в шестнадцатеричной записи не важен: int("FF", 16) и int("ff", 16) дают одно и то же.
Что с этим делают на ЕГЭ
| Задача | Код |
|---|---|
| количество единиц в двоичной записи | bin(n).count("1") |
| количество нулей | bin(n)[2:].count("0") |
| длина двоичной записи (число разрядов) | len(bin(n)) - 2 или n.bit_length() |
| последняя цифра двоичной записи | n % 2 |
| приписать разряды справа | s = bin(n)[2:] + "11" |
| перевести обратно | int(s, 2) |
Пример с ЕГЭ: задание 14 — сколько единиц в двоичной записи
Формулировка: «Сколько единиц содержится в двоичной записи значения выражения 4²⁰²⁰ + 2²⁰¹⁷ − 15?»
Python считает большие числа точно, без переполнения, поэтому решение — одна строка:
1 2
Именно ради таких заданий и держат в голове bin: руками здесь пришлось бы расписывать степени двойки и занимать разряды, а программа делает это за миллисекунду.
Пример с ЕГЭ: задание 5 — автомат и двоичная запись
Формулировка: «Алгоритм строит двоичную запись числа N и дописывает справа два разряда: 00, если N чётное, и 11, если нечётное. Полученная запись — это число R. Найдите минимальное N, при котором R > 100».
1 2 3 4 5 6 7
Схема решения любого задания 5 одинаковая: перебор N → построить запись по правилу из условия → перевести обратно → проверить условие. Меняется только середина.
Если в условии просят не минимальное, а наибольшее N — перебирай сверху вниз (range(10000, 0, -1)) или собирай все подходящие в список и бери max.