我需要将1到6000000之间的数字转换成像ABCDE这样的字母组合。 少写字母更好。但我猜我需要4或5。
有人能指出我正确的方向,如何编写一个算法来将数字转换为字母并返回?只有A-Z。 (帽)。
答案 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 answer到this 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寻求帮助。