我正在研究一個在數字基數之間轉換的程序。例如,八進制是8,十進制是10.字母A
到Z
可以認爲是基數26.在數字基數之間轉換數字
我想將數字如「A」轉換爲0,Z轉換爲25,「AA」轉換爲27和「BA 「進入53.
在我開始編碼之前,我正在紙上做所以我理解這個過程。首先,我試圖將533轉換爲基數26.
什麼算法最適合這樣做?
我正在研究一個在數字基數之間轉換的程序。例如,八進制是8,十進制是10.字母A
到Z
可以認爲是基數26.在數字基數之間轉換數字
我想將數字如「A」轉換爲0,Z轉換爲25,「AA」轉換爲27和「BA 「進入53.
在我開始編碼之前,我正在紙上做所以我理解這個過程。首先,我試圖將533轉換爲基數26.
什麼算法最適合這樣做?
您需要分配 「位」,以每個字母,如:
A = 0 N = 13
B = 1 O = 14
C = 2 P = 15
D = 3 Q = 16
E = 4 R = 17
F = 5 S = 18
G = 6 T = 19
H = 7 U = 20
I = 8 V = 21
J = 9 W = 22
K = 10 X = 23
L = 11 Y = 24
M = 12 Z = 25
然後,你{20,13}
變得UN
。
轉換回是UN -> {20,13} -> (20 * 26 + 13) -> 52
。
作爲進一步的例子,我們試試數字10163,隨機抽出空氣。
除以26,直到得到小於26的數字(即兩次),並且得到,其小數部分爲0.03402366。
乘以26,你得到與小數部分0.88461516。
乘是 26,你會得到(其實在我的計算器22.99999416,但由於初始師只有兩個步驟,我們停在這裏 - 非常輕微的不準確是由於這樣的事實,浮點數字正在四捨五入)。
所以「數字」是{15,0,23}
這是「數字」PAX
。哇,真巧嗎?
爲PAX
轉換回小數,其
P * 262 + A * 261 + X * 260
或
(15 * 676) + (0 * 26) + 23
= 10140 + 0 + 23
= 10163
將20和13轉換爲代表基數爲26的符號20和13。這聽起來像你在使用字母表中的字母,那就是UN(其中A是0,Z是25)。
讓我們退後一步一秒鐘,並期待在小數。
「147」是什麼意思?或者說,當這樣排列的字符'1','4'和'7'表示什麼?
有10位十進制數字,在此之後,我們在第一個左邊添加另一個數字,依此類推,隨着數字的增加。所以在「9」= 9 * 1之後,我們得到「10」= 1 * 10 + 0 * 1。所以「147」是1 * 10^2 + 4 * 10 + 7 * 1 = 147。同樣,我們可以倒退 - 147/10^2 = 1,映射到字符'1'。 (147%10^2)/ 10 = 4,映射到字符'4'。 147%10 = 7,映射到字符'7'。
這個作品適用於任何基數N - 如果我們得到數字0,它映射到我們集合中的第一個字符。數字1映射到第二個字符,依此類推,直到數字N-1映射到我們的數字集中的最後一個字符。
你在寫什麼語言?如果你在Perl中這樣做,你可以使用我在很多年前寫的CPAN模塊Math :: Fleximal,當時我感到無聊。如果你使用的語言具有無限精度的整數,那麼生活變得更容易。所有你需要做的就是採取字符,將它們轉換成一個整數數組,然後進行計算以將其轉換爲數字。
第一個餘數(13或N)將是右側的最後一個字母。然後你用20除以26得到20作爲餘數,所以第二個字母是U 533 - > UN – 2011-02-04 02:53:44