Определите количество цифр с числовым значением превышающим 9 в 27 ричной записи числа цифр

Узнайте, как определить количество цифры >9 в 27‑ричной записи числа. Пошаговый разбор, примеры и полезные подсказки для решения задачи.

В этой статье мы подробно разберём, как подсчитать количество «старших» цифр (со значением от 10 до 26) в записи произвольного целого числа в системе счисления с основанием 27. Поясним, почему такая задача может быть полезной, и предложим несколько вариантов реализации – от простого псевдокода до готовых функций на популярных языках программирования.

Что такое 27‑ричная система счисления?

Система счисления с основанием 27 использует 27 различных символов для представления цифр:

  • Цифры 0–9 обозначают значения 0–9.
  • Буквы A–Q (или любые другие ) представляют значения 10–26.

Таким образом, любая позиция в 27‑ричной записи хранит число от 0 до 26 включительно, а вес каждой позиции растёт по степеням 27:

N = d_k·27^k + d_{k-1}·27^{k-1} + … + d_1·27 + d_0,
где 0 ≤ d_i ≤ 26

Формулировка задачи

Дано целое неотрицательное число N. Требуется:

  1. Записать N в 27‑ричной системе.
  2. Подсчитать, сколько цифр в этой записи имеют числовое значение больше 9 (т.е. равны 10…26).

Ответом будет целое число C – количество «старших» цифр.

Пример работы

N (десятичное) 27‑ричная запись Старшие цифры C
0 0 0
27 10 1 (значение 1) – не считается 0
100 3R (3·27 + 19) R=19 → старшая 1
12345 1KJ (1·27² + 20·27 + 19) K=20, J=19 → обе старшие 2

Алгоритм решения

Самый простой способ – повторно делить число на 27 и проверять остаток:

  1. Инициализировать счётчик cnt = 0.
  2. Пока N > 0:
    • Вычислить rem = N mod 27 (остаток от деления).
    • Если rem > 9 → увеличить cnt на 1.
    • Заменить N = N div 27 (целочисленное деление).
  3. По завершении цикла cnt содержит требуемый результат.

Эта процедура работает за O(log_{27} N) шагов – количество цифр в 27‑ричной записи.

Псевдокод

function countHighDigits(N):
 cnt ← 0
 while N > 0:
 rem ← N mod 27
 if rem > 9:
 cnt ← cnt + 1
 N ← N div 27
 return cnt

Реализация на разных языках

5.1 Python

def count_high_digits(n: int) -> int:
 """Возвращает количество цифр >9 в 27‑ричной записи числа n."""
 cnt = 0
 while n:
 n, rem = divmod(n, 27)
 if rem > 9:
 cnt += 1
 return cnt

print(count_high_digits(12345)) # → 2

5.2 C++

#include <iostream>

int countHighDigits(long long n) {
 int cnt = 0;
 while (n > 0) {
 int rem = n % 27;
 if (rem > 9) ++cnt;
 n /= 27;
 }
 return cnt;
}

int main {
 std::cout << countHighDigits(12345) << std::endl; // 2
 return 0;
}

5.3 JavaScript

function countHighDigits(n) {
 let cnt = 0;
 while (n > 0) {
 const rem = n % 27;
 if (rem > 9) cnt++;
 n = Math.floor(n / 27);
 }
 return cnt;
}

// Пример
console.log(countHighDigits(12345)); // 2

Оптимизации и альтернативные подходы

  • Предвычисление таблицы. Если требуется выполнять задачу многократно для разных N, можно заранее посчитать количество «старших» цифр для всех чисел от 0 до 26 и хранить их в массиве high[27]. Затем каждый шаг деления просто обращается к этому массиву.
  • Bit‑mask. Поскольку порог 9 фиксирован, можно проверять условие rem > 9 через сравнение с константой 0xA.
  • Векторизованные операции. При больших объёмах данных (например, миллионы чисел) удобно воспользоваться SIMD‑инструкциями, но это уже выходит за рамки базовой задачи.

Где может понадобиться такой подсчёт?

Подсчёт цифр с высоким значением встречается в:

  • Криптографических алгоритмах, где используется нестандартное основание для усиления энтропии.
  • Сжатии данных: в некоторых схемах используется запись в базе 27 для представления буквенно‑цифровых символов.
  • Генерации уникальных идентификаторов (UUID‑like) с ограниченным набором символов.
  • Обучающих задач по программированию – отличная практика работы с системами счисления.

Часто задаваемые вопросы

8.1 Можно ли решить задачу без деления?

Да. Если известна длина записи (количество цифр), можно преобразовать число в строку с помощью функции toString(27) (в JavaScript) и пройтись по символам, проверяя их код. Но внутренне язык всё равно делит число, так что алгоритмически различий нет.

8.2 Как обрабатывать отрицательные числа?

Для задачи в контексте «цифр» обычно рассматривают только неотрицательные целые. Если всё же требуется, можно взять абсолютное значение abs(N) перед началом процесса.

8.3 А что если основание отличается от 27?

Алгоритм полностью аналогичен: меняем только порог 9base-1 и значение сравниваемого предела (в нашем случае фиксировано 9, потому что интересуемся цифрами >9).

Волшебный совет

Трюк для быстрого прототипа: в Python можно воспользоваться встроенной функцией numpy.base_repr для получения строки в любой системе счисления, а затем подсчитать «старшие» символы одной строкой:

import numpy as np
def magic_count(n):
 s = np.base_repr(n, base=27) # получаем строку, например '1KJ'
 return sum(1 for ch in s if ch.isalpha) # буквы = значения >9

Такой «магический» приём избавляет от ручного цикла и делает код лаконичнее.

Подсчёт количества цифр со значением более 9 в 27‑ричной записи числа – задача простой, но полезной при работе с нестандартными системами счисления. Мы рассмотрели теорию, привели строгий алгоритм, предоставили готовый код на трёх популярных языках и обсудили варианты оптимизаций. Теперь вы можете смело применять эти знания в проектах, связанных с кодированием, криптографией или просто в учебных упражнениях.

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