2013-03-04 6 views
6

Итак, на основе question I asked earlier, я загрузил и установил boost. У меня есть этот код:C++ Boost Large Number Storage

#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' –

ответ

2

Вы пытаетесь построить из целого литерала: что является именно то, литерал типа «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, а не скрытая конструкция-from-string-at-runtime, используемая gmpxx (обязательно учитывая, что требуется выделение памяти).