我有一点问题。为了增长我的 C 知识,我决定尝试实现一个基本的 bigint 库。
bigint 结构的核心将是一个 32 位整数数组,选择它们是因为它们适合寄存器。这将允许我在数字之间进行操作,这些操作将在 64 位整数中溢出(这也将适合寄存器,因为我在 x86-64 上),并且我可以将结果的每个部分移出。我已经实现了基本的加法,为了测试它是否有效,我必须打印数组。出于我自己的测试目的,如果我使用就可以了printf()
并以十六进制输出每个数字。我能读得很好。
然而,大多数人无法阅读十六进制。由于该数字(本质上)以 2^32 为基数存储,因此打印有点问题。转换为基数 10 的好方法是什么?
EDIT:
这不涉及了解如何从一个基数转换到另一个基数,而是涉及实现此目的的好方法。我正在考虑用另一个基数制作另一个 bigint 并进行打印转换。
首先,如果没有基本操作(例如除法和模数),你就无法以合理的方式进行 I/O。为了有效实现将 bigint 转换为以 10 为基数的字符串,我正在研究两种可能的优化:
首先,您可以除以 10 的某个幂,而不是精确除以 10。这意味着,例如,每次将数字除以 10000 时,您都会得到四个以 10 为基数的数字。
其次,你会如何选择除以 10 的哪个次方? 10、100、1000、10000 等等...
似乎有一个不错的选择,即可以适合您的单词(32 位)的最大 10 次幂。幸运的是,与两个“bigint”相比,您可以更有效地通过一个单词实现除法/模数。
我还没有给出实现,因为我仍在业余时间研究这个问题,因为我已经在我的库中实现了基本操作,并且 I/O 希望是下一步;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)