Добрый день, продолжаем тему максимально быстрых и эффективных способов решения заданий ЕГЭ по информатике с помощью программ на Python. В прошлый раз мы рассматривали, как очень быстро делать любые задания темы 2 (лог. выражения и таблицы истинности), ну а сегодня разберем удобный способ перевода чисел в различные системы счисления.
Этот способ подойдет для решения вообще всех задач ЕГЭ, где так или иначе встречается перевод чисел, в частности мы решим пару задач из раздела 14 (Кодирование чисел. Системы счисления. Прямое сложение в системах счисления).
Сразу приведем универсальное решение, работающее со всеми системами счисления на примере, а затем уже порешаем задачи, так что читайте до конца, чтоб окончательно, раз и навсегда разобраться и запомнить, как это делается быстро и удобно.
Допустим, нужно перевести число 123 в двоичную, восьмеричную, шестнадцатеричную и, например, еще и в 5-ричную системы счисления.
123(10) = ? (2)
123(10) = ? (8)
123(10) = ? (16)
123(10) = ? (5)
а затем сделать обратный перевод из этих систем в десятичную.
так вот, программа будет универсальной и почти одинаковой для всех этих случаев, но сначала двоичная
Двоичная система счисления
представьте себе, это все, мы получили ответ, который выводится в обратном порядке и в столбик, да, это несколько неудобно, но уже является правильным решением.
Если вам нужен только ответ, смысла дорабатывать программу нет, берем ответ в обратном порядке снизу вверх.
Ответ: 123(10) = 1111011(2)
Другие системы счисления
123(10) = ?(8)
123(10) = ?(16)
123(10) = ?(5)
А здесь даже и рассказывать нечего, потому что, как вы уже наверняка догадались, все то же самое только нужно заменить 2 на 8 или 16 или 5 (делим на основание системы, основание - это количество цифр, используемых в системе, например, двоичная - две цифры, восьмеричная - восемь, пятеричная - пять).
Восьмеричная
Ответ: 123(10) = 173(8)
Шестнадцатеричная
Здесь необходимо вспомнить, что двухразрядные числа (с двумя циферками) заменяются на буквы, 10 - А, 11 - В, 12 - С и так далее. Это используется во всех системах, основание которых больше 10, не только в шестнадцатеричной. Словом - видим двузначное число, заменяем буквой.
Ответ: 123(10) = 7B(16)
Пятеричная система
Ответ: 123(10) = 443(5)
И вот эти 4 строчки на Python уже можно использовать для решения задач, например:
Пример 1
Значение выражения 2 * 216^6 + 3 * 36^9 − 432 записали в системе счисления с основанием 6. Сколько цифр 5 содержится в этой записи?
Посчитаем количество цифр 5, их 14. Неудобно считать, правда? Давайте избавимся от ручного подсчета, но уже в примере 2
Пример 2
Сколько единиц содержится в двоичной записи значения выражения: 4^2020 + 2^2017 – 15?
Сейчас мы просто посчитали значение выражения и вывели, результат, число огромное (ну еще бы, посмотрите, в какие степени мы возводим!)
Тем не менее, без сомнений добавляем все тот же наш универсальный перевод (само число в десятичной выводить больше не нужно, закомментируем эту строку с print(n))
получили:
обратите внимание на прокрутку, посчитать вручную при таком количестве строк не получится. Что же делать? Вариантов 2:
- Организовать удобный вывод в строку и автоматический подсчет (мы пока не знаем как и насколько долго это делается)
- Оставить все как есть и направить вывод консоли в текстовый файл (одна строчка)
выбор за вами, я начну со второго способа
просто пишу в терминале python 1.py > out.txt
Важно!!! Мы должны находиться в рабочей папке нашей программы, у меня она называется 1.py и лежит в папке numeration. Перед началом работы в Python ВСЕГДА открывайте рабочую папку в редакторе кода (команда File -> Open Folder), а уж затем и файлы из нее. В редакторе VS Code при открытой папке полоса внизу редактора будет синей - это как раз и означает, что мы находимся в рабочей папке программы.
После выполнения команды в рабочей папке я получил файл out.txt с результатом работы программы, открою его в VS Code, нажму CTRL+F (поиск), введу единичку и сразу увижу ответ - 2015, готово!
Ответ: 2015
(попробуйте проделать то же самое с примером 1)
А что если ну очень хочется выводить красиво и считать автоматически?
вот эта программка все сделает как нужно:
ну и очевидно, она будет работать и для других задач - подставьте нужное основание m, нужное число (или выражение) n, замените в последних строках цифры, которые вам нужно подсчитать .
В заключение добавим, что существуют также функции, позволяющие в одну строку выполнить перевод в двоичную, восьмеричную и 16-ричную системы (но не другие!):
Обратите внимание на префиксы 0b, 0o и 0x в результате (префикс - начало строки или переменной, обычно указывающее ее тип, здесь "0b" - binary - двоичная, 0o - octal - восьмеричная, 0x - hexadecimal - шестнадцатеричная система).
Их можно убрать:
Конструкция [2:] в Python указывает (это называется "срез"), что первые два символа выводиться не будут, строка будет показана начиная с третьего символа.
Эти функции можно использовать, чтобы ускорить решение, но в случаях с другими системами (троичная, пятеричная и т.п.) все равно придется решать с помощью кода, рассмотренного выше.
Ну и наконец, обратный перевод:
Думаю, здесь все понятно и без слов, обязательно используйте кавычки, а также только те цифры, которые есть в вашей системе! Помните, что в восьмеричной системе нет восьмерки! (только 0-7), в шестнадцатеричной нет шестнадцати (0-15) и даже в нашей родной десятичной нет цифры десять - цифры 0-9, а "10" - это число, записанное с помощью цифр 0 и 1! В пятеричной нет 5 и так далее.
Префиксы использовать можно (если вдруг ранее ответ получился с префиксом, избавляться от него необязательно):
Скучное видео:
На этом закончим, хотите больше решений задач, или других тем, пишите в комментариях, подписывайтесь, будет много таких максимально быстрых способов решений ЕГЭ
Всего доброго!