有一个任务,转换与Excel表格的列类似的列格式,其中每一列由英文字母表中的字母指定(例如,第一列是字母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