Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 将两个字母的字符串转换为3位数字_Algorithm_Logic_Data Conversion - Fatal编程技术网

Algorithm 将两个字母的字符串转换为3位数字

Algorithm 将两个字母的字符串转换为3位数字,algorithm,logic,data-conversion,Algorithm,Logic,Data Conversion,我正在处理一个软件问题,我发现自己需要将2个字母的字符串转换为3位数字。我们谈论的只是英语字母表(26个字母) 所以本质上我需要将AA,AR,ZF,ZZ等转换成一个0-999范围内的数字。 我们有676个字母和1000个数字的组合,所以涵盖了这个范围。 现在,我可以手动写一张地图,说AA=1,AB=2等等,但我想知道是否有更好的,更“数学”或“逻辑”的解决方案。 数字的顺序当然是不相关的,只要从字母到数字的转换是唯一的并且总是产生相同的结果 转换应该是双向的(从字母到数字,从数字到字母) 有人有

我正在处理一个软件问题,我发现自己需要将2个字母的字符串转换为3位数字。我们谈论的只是英语字母表(26个字母)

所以本质上我需要将AA,AR,ZF,ZZ等转换成一个0-999范围内的数字。 我们有676个字母和1000个数字的组合,所以涵盖了这个范围。 现在,我可以手动写一张地图,说AA=1,AB=2等等,但我想知道是否有更好的,更“数学”或“逻辑”的解决方案。 数字的顺序当然是不相关的,只要从字母到数字的转换是唯一的并且总是产生相同的结果

转换应该是双向的(从字母到数字,从数字到字母)

有人有主意吗?
非常感谢

如果您不必使用连续数字,您可以将两个字母的字符串视为基于36的数字。因此,您可以使用int函数将其转换为整数

int('AA',36)#370
内部('AB',36)#371
#...
内部('ZY',36)#1294
内部('ZZ',36)#1295
至于如何将数字转换回字符串,您可以参考


@毛茸茸的12因为第一个数字和最后一个数字之间的差值是1295-370=925如果不必使用连续数字,可以将两个字母的字符串视为基于36的数字。因此,您可以使用int函数将其转换为整数

int('AA',36)#370
内部('AB',36)#371
#...
内部('ZY',36)#1294
内部('ZZ',36)#1295
至于如何将数字转换回字符串,您可以参考


@毛茸茸的12因为第一个数字和最后一个数字之间的差值为1295-370=925将A-Z视为基数27中的1-26,为空白保留0

例如,“CD”->3*27+4=85


85->85/27,85%27=3,4=C,D

将A-Z视为基数27中的1-26,为空白保留0

例如,“CD”->3*27+4=85


85->85/27,85%27=3,4=C,D

谢谢您的回答!这将工作得很好,但对于“更高”的字母,它超出了界限(对于ZZ,结果是1295,我需要的范围是0-999),谢谢回答!这将非常有效,但对于“更高”的字母,它超出了界限(对于ZZ,结果是1295,我需要的范围是0-999)…或者使用基数26,让0为“A”。我更喜欢前者,所以带前导As的字符串是有区别的……或者使用基数26,让0为“A”。我更喜欢前者,因此带前导As的字符串是有区别的。