公司購買了一批新的房貸數據, 貸款編號用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, 謝謝諸位閱讀. |