Печать базы 4294967296 целое число в базе 10

Я имею в С++ вектор из 32-битных целых чисел (переменный размер, непрерывная память, как C-массив), представляющий число в базе 4294967296. Я хотел бы напечатать его в базе 10.

Эти цифры могут быть чрезвычайно большими и занимать несколько мегабайт памяти.

Каким будет лучший способ сделать это с точки зрения производительности? Могу ли я использовать GMP для этого?

Ответ 1

Да, вы можете использовать GMP для этого. Функция, которую вы ищете, mpn_get_str:

http://gmplib.org/manual/Low_002dlevel-Functions.html#Low_002dlevel-Functions

Теперь единственной проблемой является размер mp_limb_t. Это либо 32-разрядное целое число, либо 64-разрядное целое число в зависимости от платформы.

  • Если это 32-разрядное целое число, вы можете вызвать функцию непосредственно в своем массиве из 32-разрядных целых чисел. (если совпадают символы endian)
  • Если это 64-разрядное целое число, вы можете использовать его только с помощью простого указателя. (в зависимости от выравнивания и конечности) В противном случае вам придется скопировать массив в массив из 64-разрядных целых чисел, прежде чем вы сможете вызвать mpn_get_str.

В качестве альтернативы, может быть проще использовать класс mpz integer. Import ваш целочисленный массив в большое целое число, затем print он возвращается в базу 10.