2011-07-22 175 views
2

我需要將1和6000000之間的數字轉換爲像ABCDE這樣的字母組合。 少於一個字母更好。但我猜我需要4或5.將數字轉換爲字母組合

有人可以指出我在正確的方向,如何編寫一個算法將數字轉換爲字母和返回?只有A-Z。 (帽)。

+0

你能舉一個例子嗎? – danyolgiax

+0

你究竟會如何轉換?7462421會是ABC,XYZ,OKWSM還是什麼? – BlackBear

+0

你需要5個字母。 26^5 = 11881376,而26^4 = 456976. – Coeffect

回答

10

您需要轉換爲鹼基編號26:0是A,1是B,25是Z,26是BA等

Hexavigesimal Wikipedia該製品具有轉換代碼,以底座26

+1

完美。他們的代碼示例爲數字6000000 – Jeroen

+1

+1提供5個字母,正是它。我不知道Hexagesimal這個詞。 –

+0

我既不,谷歌搜索基地-26導致我:) – CharlesB

4

要做的最天真的事情是讓A,B,...,Z代表數字0,1,...,25,只是將您的號碼轉換爲基數26以獲得字母轉換。

例如,在this answerthis post中有一個C#實現。

+1

有A = 1會給你一些有趣的問題。你需要一種方法來代表0. – Coeffect

+0

@Mannimarco:好點;現在糾正了。 – PengOne

+0

我錯了代碼,它沒有返回數字的字符串..它只是無法處理數字0.諷刺的是,代碼實際上使用A作爲1.它沒有0的概念。所以26是Z,27是AA。 0返回@符號。我誤以爲0。 – Coeffect

5

字母表中有26個字母。

T優有26^4 < 6 000 000和26^5> 6 000 000

然後,你將需要5個字母,對於大部分的元素

現在,你只需要使用你的號碼底座26

他們只有一個方式寫在0的X ... 6 000 000如下:

X = a4*26^4 + a3*26^3+ a2*26^2+ a1*26^1+a0 

ai in {0,...25} then you just map ai with a letter from A to Z 
0

你應該等同A = 0,B = 1等高達Z = 25。

這將成爲一個數字系統與基底(或基數)26.

考慮到這一點,兩個數字可表示從0數爲 - 675(ZZ = 675)。 3位將代表26^3。即0-17575.

用5位數字表示0-1881375(ZZZZZ)。

您可以採取任何標準算法,將小數點之間轉換爲自己的基數來做到這一點。 Conversion between Number bases可以參考幫助。

1

那麼如果你想從十進制表示轉換,那麼有10個數字[0-9],如果你想在結果中每個十進制數字有一個字符,那麼你將需要十個字母字符。但是,如果你從二進制表示轉換,只需用'A'替換​​每個0,然後用'B'替換每個0 ...

一切都取決於你想要怎麼做...你決定使用將決定你需要多少個字母。

作爲一個例子,爲了從二進制表示這樣做, 取號模2.如果結果是0添加一個「A」,如果其爲1,加「B」 除以2的數目(或者右移一個位置。) 重複,直到數字爲零。

start with value of 57 
1. 57 Mod 2 = 1 A 
2. 57/2 = 28 
3. 28 Mod 2 = 0 BA 
4. 28/2 = 14 
5. 14 mod 2 = 0 BBA 
6. 14/2 = 7 
7. 7 mod 2 = 1 ABBA --- A musical group ! 
8. 7/2 = 3 
9. 3 mod 2 = 1 AABBA 
10. 3/ 2 = 1 
11. 1 mod 2 = 1 AAABBA 
12. 1/2 = 0 --- -done