Магическая помощь часто требуется, когда нужно работать с необычными системами счисления. В этой статье мы подробно разберём, как именно подсчитать, сколько цифр в представлении числа в системе с основанием 27 имеют числовое значение больше 9.
Что такое 27‑ричная система счисления?
27‑ричная система – позиционная система счисления с основанием 27. В ней используются для записи цифр:
- Цифры 0–9 (значения 0‑9).
- Буквы A–Q (значения 10‑26).
Это аналогично HEX, где после 9 идут A‑F, но в нашем случае диапазон шире.
Почему интересуют цифры >9?
Во многих алгоритмах (например, при подсчёте «сложности» записи) важны только «буквенные» цифры, т.е. те, чьи значения превышают 9. В системе с основанием 27 их ровно 17:
- A — 10
- B — 11
- C — 12
- D — 13
- E — 14
- F — 15
- G — 16
- H — 17
- I — 18
- J — 19
- K — 20
- L — 21
- M — 22
- N — 23
- O — 24
- P — 25
- Q — 26
Алгоритм подсчёта
Для любого целого неотрицательного числа n делаем следующее:
- Преобразуем n в 27‑ричную запись. Это обычно делается последовательным делением n на 27 с запоминанием остатков.
- Смотрим каждый полученный остаток (это цифра в системе с основанием 27).
- Если остаток ≥ 10, увеличиваем счётчик.
- Продолжаем, пока n не станет нулём.
Псевдокод
function countDigitsGT9(n): count = 0 while n > 0: digit = n % 27 // остаток – текущая цифра if digit >= 10: count += 1 n = n // 27 // целочисленное деление return count
Пример работы алгоритма
Возьмём число 2025 (в десятичной системе).
- 2025 ÷ 27 = 75, остаток 0 → цифра 0 (не считается).
- 75 ÷ 27 = 2, остаток 21 → цифра L (значение 21 > 9) → +1.
- 2 ÷ 27 = 0, остаток 2 → цифра 2 (не считается).
Реализация на популярных языках
Python
def count_gt9(num): cnt = 0 while num: digit = num % 27 if digit >= 10: cnt += 1 num //= 27 return cnt print(count_gt9(2025)) # → 1
JavaScript
function countGT9(n) {
let count = 0;
while (n > 0) {
const digit = n % 27;
if (digit >= 10) count++;
n = Math.floor(n / 27);
}
return count;
}console.log(countGT9(2025)); // 1
С++
int countGT9(long long n) {
int cnt = 0;
while (n > 0) {
int d = n % 27;
if (d >= 10) ++cnt;
n /= 27;
}
return cnt;
}
Особенности и подводные камни
- Отрицательные числа: обычный подход требует работать с абсолютным значением, а знак обрабатывается отдельно.
- Большие числа: в JavaScript точность Number ограничена 2⁵³‑1, поэтому для очень больших значений лучше использовать
BigIntили аналогичные типы. - Ведущие нули: они не влияют на количество «буквенных» цифр, так как значение их всегда 0.
Применение в реальной жизни
Подсчёт цифр > 9 в 27‑ричной записи может понадобиться в:
- Шифр‑системах, где кодируются символы алфавита (A‑Q) в виде цифр.
- Оптимизации хранилищ, где «буквенные» символы требуют больше битов.
- Анализе «сложности» представления числа в нестандартных системах счисления.
Определить количество цифр, значение которых превышает 9 в 27‑ричной записи числа, – задача простая, если разбить её на два шага: перевод в базу 27 и подсчёт цифр с остатком ≥ 10. Алгоритм работает за O(log₍₂₇₎ n) времени и не требует дополнительной памяти.
Теперь вы вооружены «магической помощью», позволяющей быстро решать эту задачу в любой среде разработки.
Дата публикации: 11:48:25