可能重复:
What data-structure should I use to create my own “BigInteger” class?
出于纯粹的兴趣,我试图设计一个可以容纳任意大整数的类型。我想支持四种基本操作[+, -, *, /]
并优化这些操作的速度。
我正在考虑某种双向链表和一点标志来表示正值或负值。但我不确定如何添加,例如,大量不同的尺寸。我应该走到两个数字的最后一个元素然后返回(使用第二个反向指向前一个元素)。
123456789 //one large number + 123 //another large number with different size
假设我可以拥有一个任意大的内存,这项任务的最佳数据结构是什么?
我希望得到一些关于算术运算最坏情况复杂性的小提示和评论。谢谢!
答案 0 :(得分:3)
在这种情况下,通常会有一个数组/向量,也许是小端(最低有效字首先)。如果实现就地操作,在增长数组时使用常量因子,则重新分配的分摊复杂性仍为O(1)。
所有操作都应该在O(n)运行时可行,其中n是输入的大小。 编辑:不,当然,乘法和除法需要更多,this answer表示它至少为O(N log N)。
出于好奇:你为什么重新实现轮子?在Java中查找here实现。 C#也有一个.NET 4.0。虽然自己实现这一点可能是一个很好的练习(我记得自己曾经做过一次),如果你只是需要这个功能,那么它已经存在于许多计算环境中。