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

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

174^55 = 1.6990597648061509725749329578093e+123 

Как я буду хранить это с помощью C (стандарт c99)?

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

3 ответов


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

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


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

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

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


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