C ++提升大数量存储

时间:2013-03-04 07:56:39

标签: c++ boost c++11 int gmp

所以基于question I asked earlier,我下载并设置了boost。我有这段代码:

#include <stdlib.h>
#include <boost\multiprecision\gmp.hpp>
using namespace std;
using namespace boost::multiprecision;

void main() {
    mpz_int N(567014094304930933548155069494723691156768423655208899778686163624192868328194365094673392756508907687565332345345678900976543567890976543565789054335678097654680986564323567890876532456890775646780976543556789054367890765435689876545898876587907876535976565578907654538790878656543687656543467898786565457897675645657689756456578656456768654657898865567689656890795587907654678798765787897865654657897654678965465786867278762795432151914451557727529104757415030674806148138138281214236089749601911974949125689884222023119844272122501649909415937);

}

但是当我编译它时说

IntelliSense: integer constant is too large

如果mpz_int不是我应该使用的,那么我应该使用什么来提升大量的int?

2 个答案:

答案 0 :(得分:8)

从字符串构造它。您可以使用mpz_intcpp_int

http://liveworkspace.org/code/1KKxfm $ 6

答案 1 :(得分:2)

您正在尝试从整数文字构造:正是这样,一个类型为“int”的文字,并且只能保存“int”大小的值。你可以:

1)将大整数常量放在引号中,以便从字符串构造值,或 2)仅使用cpp_int,使用用户定义的文字支持从扩展的精度文字构造,请参阅http://www.boost.org/doc/libs/1_55_0/libs/multiprecision/doc/html/boost_multiprecision/tut/lits.html请注意,这需要C ++ 11编译器 - 您正在使用的VC ++还没有必要语言功能来支持这一点。请注意,这是真正的constexpr初始化,而不是gmpxx使用的隐藏的struct-from-string-at-runtime(必须考虑到需要内存分配)。