0

假设我有 16 个 64 位无符号整数。在执行操作时,我一直小心翼翼地在他们之间适当地喂进进位。我可以将它们输入一种方法,将它们全部转换为一个十进制数字字符串,就好像它是一个 1024 位二进制数一样?换句话说,是否有可能制作一种适用于表示一个更大整数的任意数量整数的方法?

我想有符号整数会更困难,因为要处理最重要的位。我想最重要的整数将是有符号整数,其余的将是无符号的,以表示数字的剩余“部分”。

(这与另一个问题半相关。)

4

3 回答 3

4

您可以使用双重涉猎算法,它规避了对多精度乘法和除法的需求。事实上,维基百科页面包含该算法的 C 实现。

于 2012-12-14T12:25:39.573 回答
1

这有点不清楚。

当然,这样的功能

void print_1024bit(uint64_t digits[]);

可以写来做到这一点。但是,如果您的意思是任何标准库的printf()-family 函数都可以做到这一点,那么我认为答案是否定的。

正如您可能在另一个问题中看到的那样,将二进制数转换为不同的基数b的核心由两个操作组成:

  • b,找出当前的最低有效位
  • 除以b,在生成后删除该数字

当应用到数字为 0 时,这会以相反的顺序生成所有数字。

因此,您需要为您的 1024 位数实现“模 10”和“除以 10”。

例如,考虑十进制数 4711,我们想将其转换为八进制,仅用于此示例:

  1. 4711 % 8 是 7,所以最右边的数字是7
  2. 4711 / 8 是 588
  3. 588 % 8 是 4,下一位是4
  4. 588 / 8 是 73
  5. 73 % 8 是1
  6. 73 / 8 是 9
  7. 9 % 8 是1
  8. 8 / 8 是 1
  9. 1 % 8 是1
  10. 1 / 8 为 0,我们完成了。

因此,从底部向上到最右边的数字读取粗体数字,我们得出结论 4711 10 = 11147 8。您可以使用计算器来验证这一点,或者相信我。:)

于 2012-12-14T12:18:03.740 回答
0

当然,这是可能的,但不是非常直接。

与其重新发明轮子,不如重用一个库?

GNU多精度算术库就是这样一种可能性。我自己不需要这些东西,但它似乎符合你的要求。

于 2012-12-14T12:19:01.430 回答