把10进制数转成36进制数

1. 10进制与36进制

我们从小学习的数字都是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,不正是我们所熟悉的百位,十位,个位么!

python 10进制转为36进制

前面说到,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

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案