C 存储和打印大于2^64的整数值
我正试图写一个程序来寻找梅森素数。使用无符号long-long类型,我能够确定第9个梅森素数的值,即(2^61)-1。对于较大的值,我需要一个可以存储大于2^64的整数值的数据类型C 存储和打印大于2^64的整数值,c,types,multiprecision,C,Types,Multiprecision,我正试图写一个程序来寻找梅森素数。使用无符号long-long类型,我能够确定第9个梅森素数的值,即(2^61)-1。对于较大的值,我需要一个可以存储大于2^64的整数值的数据类型 我应该能够使用像*,*=,,这样的运算符。看看。你不能对C原生类型做你想做的事情,但是有一些库可以处理任意大的数字,比如。没有标准的方法可以让数据类型大于64位。您应该检查系统的文档,其中一些定义了128位整数。然而,要真正拥有灵活大小的整数,您应该使用其他表示形式,例如使用数组。然后,由您定义操作符=,,等等 幸运
我应该能够使用像
*
,*=
,
,这样的运算符。看看。你不能对C原生类型做你想做的事情,但是有一些库可以处理任意大的数字,比如。没有标准的方法可以让数据类型大于64位。您应该检查系统的文档,其中一些定义了128位整数。然而,要真正拥有灵活大小的整数,您应该使用其他表示形式,例如使用数组。然后,由您定义操作符=
,
,等等
幸运的是,库(如)允许您使用任意长度的整数。要存储大量数字,有许多选择,下面按首选项的递减顺序给出:
1) 使用他人在github、codeflex等上为您提到的语言开发的第三方库,即C
2)切换到其他语言,如Python,它具有大量的处理能力,支持BigNUM或C++的.java
3)开发自己的数据结构,可以用字符串(100字符长度可以指100个十进制数字),用加法、减法、乘法等自定义操作,就像C++中的复数库那样。这个选择可能是为了你的研究和教育目的。
所有这些人基本上都在说,64位CPU不可能仅仅用一条指令就能添加这些巨大的数字,但你需要一个能够添加这些数字的算法。这样的算法必须将这两个数字分成几部分
他们列出的库可以让你做到这一点,一个很好的练习是自己开发一个库(只需学习算法/函数即可)。使用double:)
它会解决你的问题 请注意,您将无法使用这些C运算符,您必须调用函数来执行数学运算。C不支持操作符重载。是的,你将别无选择,只能使用函数或转到C++,在那里你可以这样做。我不认为使用<代码>双< /C>会解决任何问题。如果我们假设典型的系统中,long-long
和double
都是64位,那么它实际上会让事情变得更糟,因为double
只有53位精度。