Как получить сколь угодно большие числа в С++?

Мне нужен способ использовать очень большие типы данных. В то время как int обычно составляет 4 байта, мне нужен тип данных 536, 870, 912 байт или, может быть, даже больше. Я не могу просто использовать массив, потому что мне нужно иметь возможность конвертировать в строку, добавлять, вычитать, умножать, делить и т. д. с ними.

Как я могу создать или использовать такой большой тип данных? Мне нужен uint4294967296_t :P

Примечание. Я пытался использовать структуры с битовыми полями, но они недостаточно велики, и я не могу преобразовать значения с их помощью.


person Blue Okiris    schedule 19.02.2017    source источник
comment
Возможно, использовать библиотеку?   -  person Greg Kikola    schedule 19.02.2017
comment
Грег имеет в виду библиотеку GIMP, которую обычно рекомендуют для этого.   -  person Cheers and hth. - Alf    schedule 19.02.2017
comment
Голосование за закрытие, поскольку рекомендации библиотек в настоящее время не относятся к теме SO.   -  person Cheers and hth. - Alf    schedule 19.02.2017
comment
У вас есть несколько вариантов, включая GMP: gmplib.org или создать свой собственный класс. Этот вопрос задавался несколько раз на SO, в том числе здесь и здесь.   -  person paulsm4    schedule 19.02.2017
comment
Если вы хотите самостоятельно выполнить математические вычисления с множественной точностью, я предлагаю вам взглянуть на . Я считаю, что том II, получисловые алгоритмы, глава 4, арифметика с множественной точностью, вас интересует. Также см. Как добавить 2 произвольного размера целые числа в C++?, который предоставляет код для некоторых библиотек C++ и OpenSSL.   -  person jww    schedule 29.08.2017


Ответы (1)


Используйте библиотеку Bignumber, я предпочитаю TTMath за ее простоту. Вы можете найти его здесь Ссылка на ttmath. TTTmath позволяет работать с большими числами, но вам может понадобиться создать собственный метод toString.

Вот пример использования TTTmath со страницы Samples:

#include <ttmath/ttmath.h>
#include <iostream>

int main()
{
ttmath::UInt<2> a,b,c;

    a = "1234";
    b = 3456; 
    c = a*b;

    std::cout << c << std::endl;
}
Listing nr 1
person Jason Ivey    schedule 19.02.2017
comment
Рекомендация библиотеки должна быть комментарием, а не ответом. Отметил это как таковое. (Это означает, что, надеюсь, мод превратит его в комментарий.) - person Cheers and hth. - Alf; 19.02.2017
comment
Почему? Он не спрашивал, как реализовать большие числа, а как их использовать. Таким образом, рекомендация библиотеки должна быть действительным ответом imo. - person zett42; 19.02.2017
comment
Вопросы, запрашивающие рекомендации библиотек, не относятся к теме SO (это одна из причин закрытия запасов). - person Cheers and hth. - Alf; 19.02.2017
comment
Мне кажется немного придирчивым, если библиотека - единственный разумный способ решить проблему. И он на самом деле не просил рекомендации библиотеки, а описал свою проблему, которая соответствовала бы stackoverflow.com/help/on-topic. - person zett42; 19.02.2017
comment
@ zett42: Я согласен, что было бы полезно задавать такие вопросы о SO, но таковы текущие правила. Думаю потому, что всегда можно добавить новые разные ответы, сколь угодно длинную последовательность рекомендаций. Например. FAQ по списку книг C++, действительно полезный вопрос, пострадал от этой проблемы и был преобразован в менее полезный формат. - person Cheers and hth. - Alf; 19.02.2017
comment
Я включу реализацию, чтобы соответствовать стандартам сообщества. Спасибо за внимание. - person Jason Ivey; 20.02.2017