将多个整数打印为一个任意长的十进制字符串

假设我有16个64位无符号整数。 在执行操作时,我一直小心地在它们之间适当地进给。 我可以将它们提供给一个方法,将它们全部转换成一个十进制数字的字符串,好像它是一个1024位的二进制数字吗? 换句话说,是否有可能使一个方法适用于代表一个更大整数的任意数量的整数?

我认为对于有符号整数来说会更困难,因为有最重要的一点要处理。 我想这将是最重要的整数是有符号整数,其余的将是无符号的,以表示数字的剩余“部分”。

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

这有点不清楚。

当然,还有一个function

void print_1024bit(uint64_t digits[]); 

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

正如您在其他问题中看到的那样,将二进制数转换为不同的基数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 。 您可以使用计算器来validation这一点,或者只是相信我。 🙂

您可以使用双重dabble算法 ,它可以避免多精度乘法和除法的需要。 实际上,Wikipedia页面包含此算法的C实现。

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

重新使用图书馆,而不是重新发明轮子?

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