2013-03-04 52 views
6

因此,基於question I asked earlier,我下載並設置了boost。我有這樣的代碼:C++ 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是不是我應該使用,那麼我應該怎麼用從升壓大整數?

+1

隨着gmpxx,你可以只寫'567014094304930933548155069494723691156768423655208899778686163624192868328194365094673392756508907687565332345345678900976543567890976543565789054335678097654680986564323567890876532456890775646780976543556789054367890765435689876545898876587907876535976565578907654538790878656543687656543467898786565457897675645657689756456578656456768654657898865567689656890795587907654678798765787897865654657897654678965465786867278762795432151914451557727529104757415030674806148138138281214236089749601911974949125689884222023119844272122501649909415937_mpz' – 2013-03-09 12:52:52

回答

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使用的運行時隱藏的構造 - 字符串(必須給出內存分配是必需的)。