Счетчик просмотров85

Перевод СС функциями bin, oct, hex, int

Оглавление
Из десятичной в другую системуОбратно в десятичную: int с основаниемЧто с этим делают на ЕГЭПример с ЕГЭ: задание 14 — сколько единиц в двоичной записиПример с ЕГЭ: задание 5 — автомат и двоичная запись

Из десятичной в другую систему

В Python есть три готовые функции — для оснований 2, 8 и 16. Все они возвращают строку с префиксом:

ФункцияПримерРезультат
bin(n)bin(25)'0b11001'
oct(n)oct(25)'0o31'
hex(n)hex(255)'0xff'

Префикс 0b, 0o, 0x почти всегда мешает — его убирают срезом [2:]:

PYTHON-КОД
1
2
3

 

Обратно в десятичную: int с основанием

Функция int() со вторым аргументом переводит строку из любой системы с основанием от 2 до 36:

PYTHON-КОД
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 считает большие числа точно, без переполнения, поэтому решение — одна строка: 

PYTHON-КОД
1
2

Именно ради таких заданий и держат в голове bin: руками здесь пришлось бы расписывать степени двойки и занимать разряды, а программа делает это за миллисекунду.

Пример с ЕГЭ: задание 5 — автомат и двоичная запись

Формулировка: «Алгоритм строит двоичную запись числа N и дописывает справа два разряда: 00, если N чётное, и 11, если нечётное. Полученная запись — это число R. Найдите минимальное N, при котором R > 100».

PYTHON-КОД
1
2
3
4
5
6
7

Схема решения любого задания 5 одинаковая: перебор N → построить запись по правилу из условия → перевести обратно → проверить условие. Меняется только середина.

Если в условии просят не минимальное, а наибольшее N — перебирай сверху вниз (range(10000, 0, -1)) или собирай все подходящие в список и бери max.

Оцените статью

Другие статьи по предмету

Другие статьи не найдены