Печать базы 4294967296 целое число в базе 10 - PullRequest
10 голосов
/ 23 октября 2011

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

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

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

1 Ответ

7 голосов
/ 23 октября 2011

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

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

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

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

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

...