Хранить и работать с большими номерами в C

Мне нужна помощь, работающая с очень большими числами. Согласно Windows calc, показатель

174^55 = 1.6990597648061509725749329578093e+123 

Как я могу хранить это, используя C (стандарт c99)?

int main(){
  long long int x = 174^55; //result is 153
  printf("%lld\n", x);
}

Ответ 1

Обычные типы на C обычно могут хранить до 64 бит, поэтому вам нужно будет хранить большие числа в массиве, например, и самостоятельно писать математические операции. Но вы не должны изобретать колесо здесь - вы можете попробовать многоадресную арифметическую библиотеку GNU.

И как уже отмечалось в комментариях, операция ^ - двоичный XOR. Для возведения в степень вам нужно будет использовать математические функции, такие как pow.

Ответ 2

Если аппроксимация в порядке, вы можете использовать числа с плавающей запятой (float или double). И вам нужно pow, а не ^, как говорили комментаторы.

Однако для криптографии аппроксимация не работает. Вам нужна поддержка арифметики с очень большими целыми числами. GMP обеспечивает общую арифметическую поддержку с несколькими точками. Многие криптографические пакеты также будут иметь такие алгоритмы в своем коде, либо через стороннюю библиотеку, либо встроенную; PuTTY имеет библиотеку bignum для больших целых чисел, а OpenSSL, вероятно, имеет нечто подобное.

Базовые типы данных C недостаточны.

Ответ 3

Вы можете сохранить его в массиве целых чисел. 64-разрядное целое число - всего 2 32-битных целых числа. Целое число в 1024 бит также можно рассматривать как 32 32-битных целых числа.