Задание 14 ЕГЭ по информатике. Позиционные системы счисления.

Тема 14. Решение заданий ЕГЭ, связанных с системами счисления, основано на умении переводить числа между системами, выполнять арифметические операции и анализировать закономерности в позиционных системах.

Краткая теория

  • Позиционные системы счисления — системы, где значение цифры зависит от её позиции (разряда).
  • Чтобы перевести число 12345<sub>N</sub> в десятичную систему, нужно:1·N⁴ + 2·N³ + 3·N² + 4·N¹ + 5·N⁰
  • Последняя цифра числа в системе с основанием N — это остаток от деления на N.
  • Число 10<sub>N</sub> — единица и N нулей; 10<sub>N</sub>−1 — N девяток (или N−1 в любой системе).
  • a<sup>N</sup>−1 в системе с основанием a записывается как N старших цифр (a−1).

Стандартные функции Python для перевода

В Python есть встроенные функции для перевода десятичного числа в другие системы счисления:

  • bin(x) → двоичная форма (строка с префиксом 0b)
  • oct(x) → восьмеричная форма (строка с префиксом 0o)
  • hex(x) → шестнадцатеричная форма (строка с префиксом 0x)
n = 67
print(bin(n))  # 0b1000011
print(oct(n))  # 0o103
print(hex(n))  # 0x43

Чтобы убрать префикс, используем срез: bin(n)[2:].

Использование функции int()

Функция int() позволяет переводить строку, представляющую число в системе с основанием от 2 до 36, в десятичное число:

print(int("1010", 2))   # 10
print(int("7B", 16))    # 123
print(int("234", 5))    # 69

⚠️ Максимальное основание = 36, так как для обозначения цифр используются символы 0–9 и A–Z.

Алгоритмы перевода чисел

Из произвольной системы в десятичную


Алгоритм (Horner):
┌───────────────────────────────────────────────┐
│ Вход: строка s = cₖ…c₂c₁c₀ (в базе N)          │
│ Выход: десятичное значение                    │
├───────────────────────────────────────────────┤
│ value := 0                                    │
│ для каждой цифры c из s слева направо:        │
│    value := value * N + val(c)                │
│ вернуть value                                 │
└───────────────────────────────────────────────┘

Пример: s = 234₅
value = 0
→ (2): value = 0*5 + 2 = 2
→ (3): value = 2*5 + 3 = 13
→ (4): value = 13*5 + 4 = 69
Ответ: 69₁₀

Каждая цифра умножается на основание в степени разряда:

234<sub>5</sub> = 2·5² + 3·5¹ + 4·5⁰ = 50 + 15 + 4 = 69

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


Алгоритм (целая часть):
┌─────────────────────────────────────────┐
│ Вход: десятичное число X, основание N   │
│ Выход: запись X в системе с основанием N│
├─────────────────────────────────────────┤
│ пока X > 0:                             │
│   r := X mod N        ← остаток (цифра) │
│   X := X div N        ← целая часть     │
│   записать r слева к уже найденным      │
│ если цифр нет → результат "0"           │
└─────────────────────────────────────────┘

Пример: X=69, N=5
┌───────────┬──────────┬────────────┬─────────────┐
│ Итерация  │  X : N   │  Остаток r │  Новая X    │
├───────────┼──────────┼────────────┼─────────────┤
│    1      │ 69 : 5   │     4      │    13       │
│    2      │ 13 : 5   │     3      │     2       │
│    3      │  2 : 5   │     2      │     0       │
└───────────┴──────────┴────────────┴─────────────┘
Читаем остатки снизу вверх → 234₅

Используется деление с остатком:

  • Делим число на основание N.
  • Запоминаем остаток.
  • Продолжаем, пока частное ≠ 0.
  • Читаем остатки в обратном порядке.
69 : 5 = 13 остаток 4
13 : 5 = 2 остаток 3
2 : 5 = 0 остаток 2
=> 234<sub>5</sub>

Реализация функций перевода в Python

Цикл

def dec2base(n, base):
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    res = ""
    while n > 0:
        res = digits[n % base] + res
        n //= base
    return res or "0"

print(dec2base(69, 5))  # 234

Рекурсия

def dec2base_rec(n, base):
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    if n < base:
        return digits[n]
    return dec2base_rec(n // base, base) + digits[n % base]

print(dec2base_rec(69, 5))  # 234

Работа с буквами


Отображение цифр:
0 1 2 3 4 5 6 7 8 9 A  B  C  D  E  F  ...  Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 35

Пример (HEX): 0x7B  = 7*16 + 11 = 123
Пример (BASE-36): "AZ" = 10*36 + 35 = 395

Для оснований больше 10 цифры выше 9 заменяются буквами: A=10, B=11, ... F=15.
При переводе используем строку-алфавит: abc = "0123456789ABCDEF"

Перевод в десятичную из произвольной

def base2dec(s, base):
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    s = s.upper()
    n = 0
    for ch in s:
        n = n * base + digits.find(ch)
    return n

print(base2dec("234", 5))  # 69

Разбор типовых заданий

Задание 1

49⁷ + 7²¹ − 7. Найти количество цифр 6 в 7-ичной записи.

res = 49**7 + 7**21 - 7
count6 = 0
while res > 0:
    if res % 7 == 6:
        count6 += 1
    res //= 7
print(count6)

Задание 2

Сколько значащих нулей в двоичной записи числа 4**512 + 8**512 − 2**128 − 250?

res = 4**512 + 8**512 - 2**128 - 250
print(bin(res)[2:].count('0'))

Задание 3

Число 67₁₀ в системе с основанием N оканчивается на 1 и содержит 4 цифры. Найти N.

def dec2x(dig, x):
    res = ''
    while dig:
        d = dig % x
        res = (chr(ord('A') + d - 10) if d >= 10 else str(d)) + res
        dig //= x
    return res

for i in range(2, 36):
    d = dec2x(67, i)
    if d.endswith('1') and len(d) == 4:
        print(i)
        break

Контрольные вопросы и мини-задания

  1. Что такое позиционная система счисления?
  2. Как перевести число из системы N в 10-ичную?
  3. Почему функция int() принимает основание до 36?
  4. Чему равен результат int('F', 16)?
  5. Сколько значащих нулей имеет число 16**3 в шестнадцатеричной записи?
  6. Переведите 345₁₀ в систему с основанием 8.
  7. Как записывается 2ⁿ − 1 в двоичной системе?
  8. Какое наименьшее основание системы, в которой 30 — трёхзначное число?
  9. Запишите число 255 в 16-ричной и 8-ричной системах.
  10. Напишите функцию, возвращающую количество цифр «A» в 16-ричной записи чисел от 100 до 200.

Задания для подготовки

Простые

Средние

Сложные

https://kompege.ru/task?id=24619

https://kompege.ru/task?id=19028

https://kompege.ru/task?id=18169

https://kompege.ru/task?id=18168

https://kompege.ru/task?id=9918

https://kompege.ru/task?id=9914

https://kompege.ru/task?id=9904

https://kompege.ru/task?id=7702

https://kompege.ru/task?id=5895

https://kompege.ru/task?id=5879

https://kompege.ru/task?id=5436

https://kompege.ru/task?id=3775

https://kompege.ru/task?id=3759

https://kompege.ru/task?id=3758

https://kompege.ru/task?id=1753

https://kompege.ru/task?id=1344

https://kompege.ru/task?id=1056

https://kompege.ru/task?id=926

https://kompege.ru/task?id=828

https://kompege.ru/task?id=778

https://kompege.ru/task?id=722

https://kompege.ru/task?id=271

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=8254

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=8052

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=8045

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7841

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7840

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7839

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7838

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7677

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7676

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=7473

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6898

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6897

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6470

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6469

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6468

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=6221

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5995

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5823

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5822

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5821

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5820

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5819

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5818

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5817

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5816

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5815

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5814

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5813

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5812

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5811

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5810

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5809

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5808

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5807

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5806

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5705

https://kpolyakov.spb.ru/school/ege/gen.php?action=viewTopic&topicId=5704

https://education.yandex.ru/ege/inf/task/58a63517-ce35-4416-8b9f-5a719e4ea77e

https://education.yandex.ru/ege/inf/task/021d2ffa-3915-42ef-87ae-258cf3ff5673

https://education.yandex.ru/ege/inf/task/1630a1f6-eb68-4a20-8be5-6c1552224ed7

https://education.yandex.ru/ege/inf/task/d4584e0e-7f27-47de-bf19-688170399d46

https://education.yandex.ru/ege/inf/task/47e2b15a-915c-43b2-a98a-deadddb91502

https://education.yandex.ru/ege/inf/task/45de346b-e054-48b5-a4ab-414c7b117edb

https://education.yandex.ru/ege/inf/task/c53cc9a0-13d9-4dea-9d7b-46c5cee0965f

https://education.yandex.ru/ege/inf/task/670e5c1b-0a49-400b-9e68-b4f92db39c45

https://education.yandex.ru/ege/inf/task/ae1e6ebd-512c-4ea3-9bb6-6862096652d8

https://education.yandex.ru/ege/inf/task/29fa61ad-cac1-4b57-a9ac-673ff4abd400

https://education.yandex.ru/ege/inf/task/5b214f5e-974b-46db-bf04-5aa73d9d99d3

https://education.yandex.ru/ege/inf/task/376fdf5f-fe0f-49fe-873c-698126bf1ccd

https://education.yandex.ru/ege/inf/task/de78f4fe-7180-4347-be54-c0df9f1467d0

Понравилась статья? Поделиться с друзьями:
Школа Виктора Комлева