| 公司购买了一批新的房贷数据, 贷款编号用6个英文字母, 大小写可以区分. 公司为方便今后管理, 决定采用现有的数据系统. 现有的系统可以容纳10个符号, 但无法区分大小写. 对于那些管数据的同事来说, 这实在是太难了. 他们于是找到我, 问能不能帮帮忙, 一顿饭的酬劳. 我一看就觉得没问题. 提出先吃饭, 他们同意了.一行四人在华尔街附近找了家中档的西餐馆, 菜单上许多东西恐怕用中文写我都看不懂, 他们就争先恐后地帮我解释. 菜点好后, 还没上来, 我已经就有主意了. 小写a-z用.0-25表示, 大写A-Z用 26-51 表示, 每逢52进一位, 所以原来的编号就成了52进制的6位数. 然后我把它转换成10进制的10位数. 52的 6 次方是多少, 我没带计算器自然不知道, 但粗粗估一下和10的10次方相当接近. 饱餐一顿之后, 回公司后一坐下, 我用计算器按了一下, 不好, 52的6次方是19打头的11位数. 饭已经吃了, 不做出来不好交代. 还好,没多久我就想出来了. 后面9 位用数字, 前面两位用英文字母 A-T, 正好代表0-19. 当我把这十多年前的杰作写出来, 正在得意, 网友HPC指出实际上有更简单的解法. 6位英文字母尽管已不能辨认大小写, 还是照样保留, 另外用一个6位数的二进制数(0或1)来代表6个字母的大小写. 再把这个数转换成10进制的数, 最大为63,加在这6个英文字母前边, 就可唯一地表达原来的房贷编号. 这个方法从许多方面来说, 都优于我的方法: (1) 最大程度地保留了原来的信息, 增加了可读性. (2) 只用了8位. (3) 转换和逆转换过程中, 计算工作量都大大减少. 注:最后一段, 已根据HPC的评论重写. 写这个系列, 还能学到新的东西, 是完全没有预料到的, 真可谓种瓜得豆. 谢谢HPC, 谢谢诸位阅读. |