Как преобразовать число в буквенную 26-ричную систему счисления

Есть задача конвертировать форматы столбцов подобных столбцам таблицы Excel, где каждый столбец обозначается буквой английского алфавита (например 1 столбец буквой A, второй B) и их сочетаниями (например 27 столбец будет обозначен AA, 28 - AB, 29 - AC и т.д.). Таким образом каждый раз когда текущей алфавитной таблицы становится мало, добавляется еще один буквенный "разряд" как в системах счисления, чтобы узнать номер клетки к номеру столбца просто добавляется числовое значение строки (например AA55, T62, B12).

Есть еще один формат в задаче, где координаты клетки задаются исключительно числами в формате R<номер строки>C<номер столбца>, так номер из первого формата BC23 во втором будет выглядеть как R23C55, задача - написать двусторонний преобразователь форматов, где вводится количество координат, а затем сами координаты клеток в любом формате. Успешно написав конвертацию из буквенного формата в числовой, никак не могу сделать обратное, вот лучше что у меня получилось:

n = int(input())
f = []
for _ in range(n):
    a = input()
    if a[0]=='R' and 'C' in a and 47< ord(a[1]) <58:
        b = list(map(int, a[1:].split('C')))
        x=''
        s = 1
        sums = 26
        while b[1]>sums:
            s+=1
            sums+=pow(26, s)
        y = 0
        for i in range(s-1, -1, -1):
            y = b[1]//pow(26, i)
            if y>26 or b[1]==0:
                y=26
            b[1]-=y*pow(26, i)
            x+=chr(y+64)
        f.append(x+str(b[0]))
    else:
        i = 0
        x = 0
        string = ''
        while 64<ord(a[i])<91:
            string+=a[i]
            i+=1
        string = string[::-1]
        for j in range(len(string)):
            x+=(ord(string[j])-64)*pow(26, j)
        f.append(f'R{a[i:]}C{x}')
print(*f, sep='\n')

При написании алгоритма разглядел параллель с преобразованием в систему счисления, но отличием является отсутствие в системе нуля, из за чего полное копирование алгоритма преобразования систем ведет к началу с буквы 'B' а не 'A' (например после Z вместо AA, выдает BA).

Работает на многих тестах, но например координаты R23C728 преобразует в ABZ23, а должен в AAZ23, прошу помощи с программой или поиском алгоритма проще.

Входные данные:
2
R23C55
BC23

Выходные данные:
BC23
R23C55

Ответы (1 шт):

Автор решения: Alexey Ten

Например так:

def conv(num):
    s = chr((num - 1) % 26 + 65)
    if num > 26:
        s = conv((num - 1)//26) + s
    return s

print(conv(728)) # AAZ
→ Ссылка