题目说明:
1 -- A,2 -- B
...
27 -- AA,28 -- AB
...
53 -- BA,54 -- BB
...
703 -- AAA
...
按照这个规则一直到无穷
或者这么说
在Excel中,列的名称是这样一个递增序列:A、B、C、…、Z、AA、AB、AC、…、AZ、BA、BB、BC、…、BZ、CA、…、ZZ、AAA、AAB…。
我们需要将上述列名序列和以下自然数序列相互转换:1、2、3、…。
解析:
其实这个就是一个26进制与 10进制转换到问题, 与10进制转换到2进制一样,不断的求余

代码:
#-*- coding: utf-8 -*-
def foo(n):
if isinstance(n, int) and n >0:
letter_lists = [chr(x) for x in range(ord('A'), ord('Z') + 1)]
str = ''
while n > 0:
m = n % 26
if m == 0:
m =26
str = letter_lists [m-1] + str
n = (n - m ) / 26
return str
print(foo(53))
# BA
反转 26进制反转10进制
from math import pow
def reverstr(s):
# 参数合法性就不校验了,核心是下面
s_lists = list(s)[::-1]
letter_lists = [chr(x) for x in range(ord('A'), ord('Z') + 1)]
num = 0
for i in range(len(s_lists)):
num += (letter_lists.index(s_lists[i]) + 1 ) * pow(26, i)
return num
print(reverstr("AA"))
# 27
博客探讨了如何将Excel的列名(如A、AA、AAA等26进制形式)与对应的行数(10进制)进行转换。通过类比10进制到2进制的转换,解释了这是一个26进制与10进制的转换问题,并提供了相应的Python代码实现。
5389

被折叠的 条评论
为什么被折叠?



