假设A代表十进制的 0 ,B代表十进制的1 ,Z 代表26 ,AA代表27,一次类推,那么ZZZZ代表十进制的多少?
这里面有一个20进制的问题,下面用python代码实现 十进制和 二十进制之间的互相转换。
首先把26个英文字母定义一个数组,去除字母“I” ,“O”,因为字母I 和十进制的1 很像,字母O和十进制的0很像。
1 #!/usr/local/bin/python
2 import string
3 import os
4 import re
5 import sys
6
7 wl = list(string.uppercase) #快速定义26个英文字母的数组
8 rl = ["I","O"] #定义需要排除的英文字母
9
10 for i in rl: #从wl中移除不需要的英文字母
11 while i in wl:
12 wl.remove(i)
13
def transv( number ): #传入英文字母返回十进制的数字
num = len(number)
if num == 1:
tnum = wl.index(version)
return str(tnum)
if num == 2:
bit = int(wl.index(version[-1]))
tenplace = (int(wl.index(version[0]))+1)*20
return str(bit + tenplace)
if num == 3:
bit = int(wl.index(version[-1]))
tenplace = (int(wl.index(version[1]))+1)*20
thousbit = (int(wl.index(version[0]))+1)*20*20
return str(bit + tenplace + thousbit)
if num == 4:
bit = int(wl.index(version[-1]))
tenplace = (int(wl.index(version[2]))+1)*20
thousbit = (int(wl.index(version[1]))+1)*20*20
tenthous = (int(wl.index(version[0]))+1)*20*20*20
return str(bit + tenplace + thousbit + tenthous)
def convert( num ): #传入十进制的num,返回英文字母
num = int(num)
if num <= 19:
rsnu = wl[num]
return rsnu
if num >19 and num <= 419:
fir = wl[num % 20]
sec = wl[(num // 20)-1]
return sec + fir
if num > 419 and num <= 8419:
fir = wl[num % 20]
sec = wl[(num // 20)%20 - 1]
if num % 400 <= 19:
thr = wl[((num // 20)//20)%20 - 2]
else:
thr = wl[((num // 20)//20)%20 - 1]
return thr + sec + fir
if num > 8419 and num <= 168419:
fir = wl[num % 20]
sec = wl[(num // 20)%20 - 1]
if num % 400 <= 19:
thr = wl[((num // 20)//20)%20 -2]
else:
thr = wl[((num // 20)//20)%20 -1]
if num % 4000 <= 419:
fou = wl[(((num // 20)//20)//20)%20 - 2]
else:
fou = wl[(((num // 20)//20)//20)%20 - 1]
return fou + thr + sec + fir
if __name__ == '__main__':
number = transv("ZZZZ")
print number
english = convert("168419")
print english
输出结果:
168419
ZZZZ