好多编程入门

如果人类使用三十六进制(数字加所有字母),算数会有多难?

2025-05-23  本文已影响0人  德隆斯宾诺莎

十进制的前十个自然数由0-9表达,而36进制的前36个自然数由0-9和a-z表达。三十六进制和十进制的对应关系如下,左边是十进制,右边是三十六进制:

0-0 1-1 2-2 3-3 4-4 5-5

6-6 7-7 8-8 9-9 10-a 11-b

12-c 13-d 14-e 15-f 16-g 17-h

18-i 19-j 20-k 21-l 22-m 23-n

24-o 25-p 26-q 27-r 28-s 29-t

30-u 31-v 32-w 33-x 34-y 35-z

我用代码制作了一张三十六进制的乘法表:

三十六进制乘法表

对比一下十进制的九九乘法表,就知道三十六进制的算数有多复杂了:

十进制乘法表

代码如下:

from string import ascii_lowercase

from string import digits

def log2(n):

    return n.bit_length() - 1

def power_of_2(n):

    return (n & (n-1) == 0) and n != 0

def to_base(num, base):

    glyphs = digits + ascii_lowercase

    if base < 2 or not isinstance(base, int):

        return

    sep = ','

    if base == 60:

        sep = ':'

    elif base == 256:

        sep = '.'

    if power_of_2(base):

        l = log2(base)

        powers = range(num.bit_length() // l + (num.bit_length() % l != 0))

        places = [(num >> l * i) % base for i in powers]

    else:

        if num == 0:

            return ('0', base)

        places = []

        while num:

            n, p = divmod(num, base)

            places.append(p)

            num = n

    if base > 36:

        return (sep.join(map(str, reversed(places))), base)

    return (''.join([glyphs[p] for p in reversed(places)]), base)

import pandas as pd

import dataframe_image as dfi

table = []

for j in range(1,36):

    temp = [to_base(j*i, 36)[0] for i in range(1,36)]

    table.append(temp)

df = pd.DataFrame(table, columns = ['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i',

                                  'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'],

                index = ['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i',

                                  'j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'])

dfi.export(df,"base36.png",max_cols=-1)

上一篇 下一篇

猜你喜欢

热点阅读