Вот как бы я это сделал на Python. Алгоритм объясняется ниже:
alph = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')
def labelrec(n, res):
if n<26:
return alph[n]+res
else:
rem = n%26
res = alph[rem]+res
n = n/26-1
return labelrec(n, res)
Функция labelrec может вызываться с номером и пустой строкой, например:
print labelrec(16383, '')
Вот почему это работает:
Если бы десятичные числа были записаны так же, как столбцы таблицы Excel, числа 0-9 были бы записаны нормально, но 10 станет «00», а затем 20 станет «10» и так далее. Отображение нескольких чисел:
0 - 0
9 - 9
10 - 00
20 - 10
100 - 90
110 - 000
1110 - 0000
Итак, картина ясна. Начиная с места подразделения, если число меньше 10, его представление совпадает с самим числом, в противном случае вам нужно откорректировать оставшееся число, вычтя его на 1 и рекурсивно. Вы можете остановиться, когда число меньше 10.
Та же логика применяется для чисел с основанием 26 в приведенном выше решении.
P.S. Если вы хотите, чтобы числа начинались с 1, вызовите ту же функцию для входного номера после уменьшения ее на 1.