Я нуждаюсь в помощи, работая с очень большими числами. Согласно Windows calc, экспоненте
174^55 = 1.6990597648061509725749329578093e+123
Как я сохранил бы это использование C (c99 стандарт)?
int main(){
long long int x = 174^55; //result is 153
printf("%lld\n", x);
}
Нормальные типы в C обычно могут хранить только до 64 бит, поэтому вам придется хранить большие числа в массиве, например, и писать математические операции самостоятельно. Но не стоит изобретать велосипед здесь - вы можете попробовать GNU Multiple Precision Arithmetic Library для этой цели.
И, как уже указывалось в комментариях, операция ^
представляет собой двоичную операцию XOR. Для возведения в степень вам придется использовать математические функции, такие как pow
.
Если приближение в порядке, вы можете использовать числа с плавающей точкой ( float
или double
). И вам понадобится pow
, а не ^
, как сказали комментаторы.
Однако для криптографии приближение не работает. Вам нужна поддержка арифметики с очень большими целыми числами. GMP обеспечивает общую арифметическую поддержку с высокой точностью. Многие криптографические пакеты также будут иметь такие алгоритмы в своем коде либо через стороннюю библиотеку, либо через встроенную; PuTTY имеет библиотеку bignum для больших целых чисел, и OpenSSL, вероятно, имеет что-то подобное.
Базовых типов данных C недостаточно.
Вы можете сохранить его в виде массива целых чисел. 64-битное целое число - это всего лишь 2 32-битных целых числа. 1024-битное целое число также может рассматриваться как 32 32-битное целое число.