c -存储和打印大于2^64的整数值



我想写一个寻找梅森素数的程序。使用unsigned long long类型,我能够确定第9个梅森素数的值,即(2^61)-1。对于较大的值,我需要一个可以存储大于2^64的整数值的数据类型。

我应该能够使用操作符,如*, *=, >, <%与此数据类型。

你不能对C原生类型做你想做的事情,但是有一些库可以处理任意大的数字,比如GNU多精度算术库。

要存储大量的数字,有许多选择,下面按照首选项降序给出:

1)使用github, codeflex等第三方库为您提到的语言,即c。

2)切换到其他语言,如Python,它有内置的大量处理能力,Java,它支持BigNum,或c++。

3)开发自己的数据结构,可以是字符串(其中100个字符长度可以指100个十进制数字),具有自定义操作,如加法,减法,乘法等,就像c++中的复数库是这样开发的。这个选择可能意味着你的研究和教育目的。

所有这些人基本上都在说,64位CPU将无法仅用一条指令添加这些巨大的数字,但您更需要一个算法,它将能够添加这些数字。这样的算法必须将这两个数字分割处理。

他们列出的库将允许您这样做,一个很好的练习是自己开发一个(只是算法/函数来学习如何完成)。

没有大于64位的数据类型的标准方法。您应该检查系统的文档,其中一些定义了128位整数。然而,要真正拥有灵活大小的整数,您应该使用另一种表示,例如使用数组。然后,由您来定义操作符=<>等。

幸运的是,像GMP这样的库允许你使用任意长度的整数

看看GNU MP Bignum库

使用double:)

它将解决你的问题!

相关内容

  • 没有找到相关文章

最新更新