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