Хранить и работать с большими числами в 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-разрядных целых числа.