6

因此,根据我之前提出的问题,我下载并设置了 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 不是我应该使用的,那么我应该使用什么来处理来自 boost 的大整数?

4

2 回答 2

8

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

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

于 2013-03-04T08:12:13.470 回答
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 使用的运行时隐藏的从字符串构造(必须考虑到需要分配内存)。

于 2014-05-30T12:18:13.183 回答