Хранить и работать с большими числами в C - PullRequest
17 голосов
/ 15 апреля 2010

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

174^55 = 1.6990597648061509725749329578093e+123 

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

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

Ответы [ 3 ]

25 голосов
/ 15 апреля 2010

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

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

5 голосов
/ 15 апреля 2010

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

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

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

2 голосов
/ 15 апреля 2010

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

...