2010-04-14 3 views
14

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

174^55 = 1.6990597648061509725749329578093e+123 

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

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

В C, '^' является двоичным XOR, а не степенью экспоненты. Для этого вам нужно использовать функцию 'pow()'. –

+1

Оператор '^' означает XOR, а не возведение в степень, в C. – pyon

+0

Вы делаете XOR, – Skynight

ответ

25

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

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

5

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

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

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

2

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

Смежные вопросы