2010-04-14 39 views
14

我需要大數目的幫助。根據Windows計算,​​指數存儲和使用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()'函數。 – 2010-04-14 20:05:40

+1

'^'操作符表示C中的異或,不是冪。 – pyon 2010-04-14 20:05:59

+0

您正在執行異或操作,您需要pow – Skynight 2017-10-15 20:32:52

回答

25

C中的正常類型通常最多隻能存儲64位,因此您必須將大數存儲在數組中,例如自己編寫數學運算。但是你不應該在這裏重新發明輪子 - 你可以嘗試GNU Multiple Precision Arithmetic Library來達到這個目的。

而且正如已經指出的評論,^操作是二進制XOR。爲了求冪,你將不得不使用數學函數,如pow

5

如果近似值正常,則可以使用浮點數(floatdouble)。正如評論者所說,你需要pow而不是^

但是,對於密碼學來說,近似不起作用。您需要支持非常大整數的算術。 GMP提供了通用的多精度算術支持。許多加密軟件包在他們的代碼中也會有這樣的算法,無論是通過第三方庫還是內置的; PuTTY有一個用於大整數的bignum庫,而OpenSSL可能有類似的東西。

基本的C數據類型是不夠的。

2

您可以將其存儲在整數數組中。一個64位整數只是2個32位整數。一個1024位整數也可以被看作32個32位整數。