C++ Повышение Хранения Больших Чисел


Итак, основываясь на вопросе , который я задал ранее, я загрузил и настроил boost. У меня есть такой код:

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

void main() {
    mpz_int N(567014094304930933548155069494723691156768423655208899778686163624192868328194365094673392756508907687565332345345678900976543567890976543565789054335678097654680986564323567890876532456890775646780976543556789054367890765435689876545898876587907876535976565578907654538790878656543687656543467898786565457897675645657689756456578656456768654657898865567689656890795587907654678798765787897865654657897654678965465786867278762795432151914451557727529104757415030674806148138138281214236089749601911974949125689884222023119844272122501649909415937);

}

Но когда я компилирую, он говорит

IntelliSense: integer constant is too large

Если mpz_int-это не то, что я должен использовать, то что я должен использовать для больших ints от boost?

2 6

2 ответа:

Построить его из строки. Вы можете использовать mpz_int или cpp_int.

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

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