1. 问题描述:
在 Excel 中,第 1 列到第 26 列的列名依次为 A 到 Z,从第 27 列开始,列名有两个字母组成,第 27 列到第 702 列的列名依次为 AA 到 ZZ。之后的列再用 3 个字母、4 个字母表示。请问,第 2021 列的列名是什么?这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
2. 思路分析:
分析题目可以知道其实本质上是进制转换问题,我们可以看成是10进制转换为26进制,这与10进制转换为其他的进制是类似的,方法也是整除当前的进制求得余数,所以我们每一次要除以26,然后将余数对应的字母依次拼接起来,可以在一开始的时候就声明长度为26的列表对应26个字母,当我们得到当前的余数的时候从列表中取出当前的字母即可,第二种方法是纯手算,因为计算量不是特别大所以直接计算也是可以的
3. 代码如下:
if __name__ == '__main__':
remainder = list()
# 生成列表中的内容
for i in range(26):
remainder.append(chr(65 + i))
# 输出测试结果看生成的结果是否正确
print(remainder)
n = 2021
res = ""
while n != 0:
# 对应索引的位置需要减去1
res = remainder[n % 26 - 1] + res
n //= 26
print(res)
if __name__ == '__main__':
print(2021 // (26 * 26))
print(2021 % (26 * 26))
# 第二位为Y
print(669 // 26)
print(669 % 26)
# 第一位为S
for i in range(19):
if i == 18: print(chr(i + 65))
# 所以最终三个数字为: "BYS"