2

我需要将 1 到 6000000 之间的数字转换为 ABCDE 之类的字母组合。字母越少越好。但我猜我需要 4 或 5 个。

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

4

5 回答 5

11

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

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

于 2011-07-22T14:50:07.313 回答
5

字母表中有26个字母。

你有 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
于 2011-07-22T14:51:10.663 回答
4

最幼稚的做法是让A,B,...,Z表示数字0,1,...,25,然后将您的数字转换为以 26 为基数以进行字母转换。

例如,这篇文章的这个答案中有一个 C# 实现。

于 2011-07-22T14:50:11.190 回答
1

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

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

例如,要从二进制表示中执行此操作,请取数字 mod 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  
于 2011-07-22T14:59:30.020 回答
0

您应该将 A = 0、B = 1 等等同于 Z = 25。

这将成为一个以 26 为基数(或基数)的数字系统。

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

使用 5 位数字,您可以表示 0 - 11881375 (ZZZZZ)。

您可以采用任何将十进制转换为自己的基数的标准算法来做到这一点。 可以参考数字基数之间的转换以寻求帮助。

于 2011-07-22T14:57:20.033 回答