我一直試圖使用PHP將非常大的整數編碼爲大寫字母序列。將0到25的值分配給A〜Z我已經將10億縮減爲DGEHTYM。如果實現一個工作算法,使用不同的情況,數字和偶數符號,結果字符串可能會更短。然而,我的目標只是一串大寫字母,或許也帶有數字字符,以使其縮短但不是必須的。將非常大的數字編碼爲字符串
編碼使用的筆,紙,我的手機上的計算器:
- 找到超過十億(PHP具有的功能
log
爲)更低的最高功率。對於10億是6。所以26^6 = 308,915,776。 - 十億通過是3.237有很多小數
- 的是d。我們有我們的第一封信!
- 現在我們將一遍又一遍地做同樣的事情,直到我們得到一個整數:拿走整個部分並乘以左邊的小數。我們每一個整體都是一封信。爲10億我打了6次,直到我得到12,這是M。
也許有一個更聰明的方法來完成這個,但我還沒有弄明白。
也許我應該有所不同,但由於缺乏一個更好的辦法,我試圖複製我的計算在PHP做了,但我有問題:1:這是非常困難的編碼編碼將與結束數A(0)如這將是BZA和2:我無法設法讓PHP檢測數字是否有小數。我必須不斷將它轉換成一個字符串並尋找一個點。
解碼字符串比較容易。從從右到左,您可以通過26提升到其位置的功率乘以每個字母的價值,除了第一個,他們總結這一切:
D => 3 x (26^6) = 926,747,328
G => 6 x (26^5) = 71,288,256
E => 4 x (26^4) = 1,827,904
H => 3 x (26^3) = 123,032
T => 19 x (26^2) = 12,844
Y => 24 x 26 = 624
M => 12
926,747,328 + 71,288,256 + 1,827,904 + 123,032 + 12,844 + 624 + 12 = 1,000,000,000
也存在類似的問題here但這些誰回答似乎不瞭解OP正在嘗試完成什麼。
所以基本上,你要很長的base10數字轉換爲base26,對不對?結果如何實現有沒有關係? –
是的。不,只要結果只是大寫字母,如何實現它並不重要。 –