第十二届蓝桥杯第三场模拟赛-第2021列列名

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"

猜你喜欢

转载自blog.csdn.net/qq_39445165/article/details/115145874