我们从小学习的数字都是10进制的,自然而然的以为这就是计数的唯一方法,直到接触2进制,才惊奇的发现原来还可以逢2进1。后来又接触了8进制,16进制,慢慢明白,这些都只是数值的一种表达形式,10进制更容易理解和使用,所以我们平时使用10进制。在编程中,进制转换是很常见的操作,那么今天,就和大家一起来实现10进制到36进制的转换。
在理解36进制之前,先回忆一下10进制,以321为例,小时候,老师是这样叫我们的
百位 十位 个位
3 2 1
3*10*10 2*10 1*1
300 + 20 + 1 = 321
数字在不同的位上,所代表的数值是不一样的,上面是10进制的321,如果321 是 36进制的,那么这个36进制的321对应的10进制数值是多少呢?
3 2 1
3*36*36 2*36 1*1
3888 + 72 + 1 = 3961
10进制是逢10进1,36进制是逢36进1, 于是我们可以总结出一个公式,假设一个数值是AnAn-1 ... A2A1A0 它是m进制的,那么换算成10进制的方法如下
An*mn + An-1*mn-1 ... + A2*m2 + A1*m1 + A0*m0
m的0次方是1, 如果m是10,不正是我们所熟悉的百位,十位,个位么!
前面说到,36进制是逢36进1,可是一个位上,最大也就是9啊,怎么用一个位来表示比9大的数值呢,这个可以借鉴16进制的方法,用a来表示10, b来表示11, 那么在36进制中,z就表示35, z + 1 = 36, 逢36进1, 那么10进制的36用36进制表示的话就是10= 1*361 + 0*360 = 36 , 36进制的10 等于10进制的36。
36进制的10 转成 10进制的过程,就是一个逐位计算的过程,每一位的数值乘以这一位的1所对应的10进制数值,然后所有位对应的10进制相加。将10进制转成36进制的过程,就是上面这个过程的反向过程,36转10进制用乘法,10进制转36进制就用除法,下面以10进制数值3961 为例,向你演示转换为36进制的过程
第一步, 3961 除以 36 , 等于110 , 余 1 ,一定要把这个余数记住
第二步, 110 除以 36 , 等于3 ,余 2
第三步, 3 除以 36 , 等于0, 余 3
第三步,3除以36 ,结果是0, 当除法的结果是0时,就不再进行转换了,接下来,把这3次除法所得到的余数倒序组合在一起正好是321, 这就是10进制数值 3961 转换成36进制的结果,用python代码处理方法如下
def base36_encode(number):
num_str = '0123456789abcdefghijklmnopqrstuvwxyz'
if number == 0:
return '0'
base36 = []
while number != 0:
number, i = divmod(number, 36) # 返回 number// 36 , number%36
base36.append(num_str[i])
return ''.join(reversed(base36))
print(base36_encode(3961))
QQ交流群: 211426309