假设我有16个64位无符号整数。在执行操作时,我一直小心地将它们放在它们之间。我可以将它们提供给一个方法,将它们全部转换成一个十进制数字的字符串,就像它是一个1024位的二进制数字一样吗?换句话说,是否有可能使一个方法适用于代表一个更大整数的任意数量的整数?
我认为对于有符号整数来说会更困难,因为最重要的是要处理它。我想最重要的整数将是有符号整数,其余的将是无符号的,以表示数字的剩余“部分”。
(这与another question半关联。)
答案 0 :(得分:4)
您可以使用double dabble algorithm,这可以避免多精度乘法和除法的需要。实际上,Wikipedia页面包含该算法的C实现。
答案 1 :(得分:1)
这有点不清楚。
当然,还有一个诸如
之类的功能void print_1024bit(uint64_t digits[]);
可以写来做到这一点。但是,如果你的意思是任何标准库的printf()
- 函数族可以做到这一点,那么我认为答案是否定的。
正如您在另一个问题中看到的那样,将二进制数转换为不同的基础 b 的核心是由两个操作组成的:
当应用直到数字为0时,这将以相反的顺序生成所有数字。
因此,您需要为您的1024位数字实现“模10”和“除以10”。
例如,考虑一下十进制数4711,我们只想为此示例转换为八进制:
因此,从底部向上读取粗体数字,向上读到最右边的数字,我们得出结论:4711 10 = 11147 8 。您可以使用计算器来验证这一点,或者只是相信我。 :)
答案 2 :(得分:0)
当然,这是可能的,但不是非常直截了当。
不是重新发明轮子,重新使用图书馆怎么样?
GNU Multi Precision Arithmetic Library就是这样一种可能性。我自己并不需要这些东西,但它似乎适合你的账单。