2010-12-22 39 views
11

我想在C++中实现一个BigInteger类。但是,首先,我有一个基本问题,“基础数据”如何表示?例如,最愚蠢的方法是拥有一个固定的(或动态的)char数组,并在char中存储每个整数的整数。但是,好吧,这是一个非常愚蠢的方式,我在这里为您提供建议。C++大整数

+2

可能重复的[如何在C++中实现big int](http://stackoverflow.com/questions/269268/how-to-implement-big-int-in-c) – darioo 2010-12-22 07:45:58

回答

10

还有一堆的建议,这里现有的实现:C++ handling very large integers

如果你有实现自己的(如作业),那么你就必须决定的最佳方式,以及如何“大”就需要处理。您可以使用一组DWORD,并处理从一个到另一个的溢出。

虽然,对于一些项目欧拉的东西,我实际上实现了一个BigNumber类建立在一个字符串。结果是+ - * /最简单的实现,并且缩放到比我能用几个unsigned long long s得到的显着更长的数字。这个性能对于解决这些难题来说是完全足够的。

因此,您需要在易用性和最佳性能之间进行权衡。玩得开心;-)

4

您可以完全按照您描述的方式创建一个大整数。事实上,我第一次实施这样的课程,就是我这样做的。它帮助我实现了算术运算(+,-等),因为它在我习惯的基础(10)中。

你的“字符数组”的自然增强是保持在10位,但是使用4位而不是整个字节。因此,数字123,456可以由字节12 34 56代替字符串123456来表示。 (三个字节,而不是六个)。

从那里,你可以使基数为2的数字存储。诸如加法的基本算术运算在基数2中与在基数10中完全相同。因此,可以使用字节FF FF存储数字65565。 (例如,在一个向量unsigned char s中。)为了效率,BigInts的某些实现使用较大的块,例如shortlong

如果您正在进行大量的显示和/或序列化到base-10,并且想要避免转换为base-2,则Base-10大整数可能会很有用。