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

十进制的前十个自然数由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)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基础1.r''表示''内部的字符串默认不转义2.'''...'''表示多行内容3. 布尔值:True、False(...
    neo已经被使用阅读 1,714评论 0 5
  • 为什么学习Python? 通过什么途径学习的Python? 上网收集视频,资料 关注公证号 买教程,书籍 Pyth...
    130920阅读 1,255评论 0 0
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,129评论 0 7
  • 1.file,n.文件;v.保存文件 [faɪl] 2.command,n.命令,指令 [kəˈmænd] 3.u...
    巢峰阅读 377评论 0 0
  • 1、概述 1、简介 JavaScript 语言的每一个值,都属于某一种数据类型. JavaScript 的数据类型...
    Qingelin阅读 510评论 0 0