1

我有这样的长整数:5291658276538691055

我如何以编程方式将此数字转换为 4-6 个大写字母,这是一个独特的组合,也可以反转以返回该数字?

例如使用 OBJ-C。

4

2 回答 2

3

有26个大写字母;

其中 6 个可以代表 26 ^ 6 个数字(308915776);

所以不行。您正在尝试将更大范围的数字映射到更小的范围,它是不可逆的。

此外,log 5291658276538691055 / log 26小于 14,因此如果 14 个字母对您有好处,只需将数字转换为基于 26 的数字并将数字映射为字母。

还有一件事 - 如果数字范围足够小,您可以对数字进行一些操作(例如,只需减去最小值)并对其进行编码,这将花费您更少的数字。

于 2013-05-25T18:12:47.537 回答
1

您需要将数字转换为 Base 26(十六进制 - 活泼的名称!)

关于 Hexavigesimal的Wikipedia 文章提供了 Java 中的示例代码 - 您应该能够很容易地适应它。

注意:您不能仅使用转换算法将您提到的长数字减少到 4-6 个大写字母(您在 Base 26 中的示例是 BCKSATKEBRYBXJ)。如果你需要这么短的转换,你只有两个选择:

  • 查找表(存储映射,例如 5291658276538691055 = ABCDEF)。显然只有当你有一组离散的数字时才有用。
  • 包括附加字符(例如小写字母 + 数字)。
于 2013-05-25T18:14:36.747 回答