Несколько вещей-
используют «только препроцесс», чтобы посмотреть на ваш выход препроцессора. Опция gcc -E, другие компиляторы также имеют функцию
используют предварительно скомпилированные заголовки.
У gcc есть опции -verbose и --trace, которые также отображают полное дерево включения, MSVC имеет опцию / showInclude, найденную на странице свойств Advanced C ++
Также, Отображение иерархии #include для файла C ++ в Visual Studio
Крупнейшие стандартные интегральные данные тип unsigned long long int
- в моей системе (32-битный Linux на x86) он имеет диапазон 0 - 1.8 * 10 ^ 20, что вам недостаточно, поэтому вам нужно создать свой собственный тип ( структура или массив) и написать простую математику (в основном вам просто нужно дополнение) для этого типа.
Если бы я был вами (а память не проблема), я бы использовал массив - один байт на десятичную цифру, а не BCD. BCD более компактен, так как в нем хранится 2 десятичных цифры на байт, но вам нужно приложить гораздо больше усилий, работая с старшими и младшими полубайтами отдельно.
А для печати вы просто добавляете '0'
(символ, а не digit) в каждый байт вашего массива, и вы получите строку для печати.
Преобразование в десятичное на самом деле означает вычисление каждой степени десяти, так почему бы просто не сохранить их в массиве байтов? Затем печать просто проходит через массив.
Я очень рекомендую использовать такую библиотеку, как GMP (библиотека GNU multiprecision). Вы можете использовать тип данных mpz_t
для больших целых чисел, различные процедуры импорта / экспорта для передачи данных в mpz_t
, а затем использовать mpz_out_str ()
, чтобы распечатать его в базе 10.
Вы не могли бы выделить память, скажем, для 5 int и сохранить свой номер в начале массива? Затем вручную перебирайте массив кусками размера int. Возможно, что-то вроде:
int* big = new int[5];
*big = <my big number>;
Что ж, при преобразовании из двоичного кода в десятичный вам действительно не нужны ВСЕ двоичные биты одновременно.Вам просто нужны биты, мощность которых вы в настоящее время вычисляете, и, возможно, двойная переменная для хранения результатов. Вы можете поместить двоичное значение в массив, скажем, i [64], перебрать его, получить мощность в зависимости от его положения и продолжать добавлять его к двойному.