将数字转换为字母组合

时间:2011-07-22 14:47:18

标签: c# algorithm hexavigesimal

我需要将1到6000000之间的数字转换成像ABCDE这样的字母组合。 少写字母更好。但我猜我需要4或5。

有人能指出我正确的方向,如何编写一个算法来将数字转换为字母并返回?只有A-Z。 (帽)。

5 个答案:

答案 0 :(得分:10)

你需要转换为base-26编号:0是A,1是B,25是Z,26是BA等。

Hexavigesimal Wikipedia文章包含转换为基础26的代码。

答案 1 :(得分:5)

字母表中有26个字母。

TYOU有26 ^ 4< 6 000 000和26 ^ 5> 6 000 000

那么你的大多数元素都需要5个字母

现在你只需要在26号基础上表达你的号码。

他们只有一种方法可以写出0 ... 6 000 000的X如下:

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

答案 2 :(得分:4)

最天真的做法是让A,B,...,Z代表数字0,1,...,25,只需将您的数字转换为26,即可获得字母转换。

例如,this answerthis post中有一个C#实现。

答案 3 :(得分:1)

如果你想从十进制表示转换,那么有10位[0-9]如果你想在结果中每个十进制数字有一个字符,那么你将需要十个字母字符。但是如果你从二进制表示转换,只需用'A'替换​​每个0,用'B'替换每一个......

一切都取决于你想要怎么做...你决定使用的基数将决定你需要多少个字母。

作为一个例子,从二进制表示,   取数字mod 2.如果结果为0,如果a为1,则添加'A',添加'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  

答案 4 :(得分:0)

你应该等于A = 0,B = 1等等,直到Z = 25。

这将成为具有基数(或基数)26的数字系统。

考虑到这一点,两位数字可以表示0到675(ZZ = 675)的数字。 3位数代表26 ^ 3。即0 - 17575。

5位数字表示0 - 11881375(ZZZZZ)。

您可以采用任何标准算法,在十进制到其自己的基数之间进行转换。 可以参考Conversion between Number bases寻求帮助。