2012-11-09 38 views
-3

我要找的蟒蛇 計算大的數字計算大的數字,但它不能。我怎麼能在Python

這樣的:

9999999999999999999999999999999999 ** 999999999999999999999999999999999999999999999999999

+0

你知道你的計算結果是10^52位的數字? – halex

回答

2

您可以嘗試使用DecInt模塊。
可以發現here

import DecInt 
bignum = DecInt.DecInt(9999999999999999) ** 999999999999999999999 
print str(bignum) 
+0

感謝您的回答 – gmarian

+0

添加了一個小例子,希望它有所幫助。 –

+1

@OfirFarchy:你還沒有試過你的例子,對吧? – georg

5

Python支持長整型,所以你可以只打印表達。這可能是不是GMP或其他圖書館,但你想要做什麼的問題,有效的是,它是不可能計算該值:

(10**35 - 1) ** (10**52 - 1)約爲10 ** (35 * 10**52)其中包含有關10**52數字。

讓我們考慮一個存儲芯片有多大,我們可以假設manifacture。月球的質量約爲7.34767309 * 10^22千克,電子的質量爲9.10938188 * 10^(-31)千克。讓我們假設我們可以使用電子來保存一個十進制數字。這意味着使用月球作爲記憶,我們可以使用大約8.066050130286116 * 10^52個電子。

這是什麼意思?如果你的超級RAM芯片和月球一樣大,你就可以計算出這個數字。如果你懂了,那對你很好,否則如果你是一個凡人,你根本無法希望擁有足夠的記憶。

DecInt模塊可以幫助您處理100k-數百萬位數字的數字,但不止如此,您需要特定的硬件和更大的數字(如您所展示的示例)根本無法實現。

+0

是的,即將這樣說。假設他們設法計算這個數字。打印它需要多長時間? – georg

+0

那麼,如果他們設法計算出來,那麼打印它所需的時間就可以忽略不計了(因爲你只是向複雜程度更低的計算添加O(n)步驟)。儘管如此,它可能會比我認爲的宇宙的當前時代還要多。 – Bakuriu

+0

@LorenzMeyer我編輯過。 – Bakuriu

0

你爲什麼不作出號碼作爲字符串 ,使功能,做類似的事情作爲人的手,用繩子倍增。

假設你讓2串 「99876」 和 「123」

,並str_multiply功能 這需要2參數作爲參數

的後者獲取字符串長度。 「123」上的3個字符做所以它是3(忽略空字符) 這裏是僞代碼

len_2 = string_len(latter); 
len_1 = string_len(former); 
flag = 0; 
result_string = ""; 
for(i=len_2-1;i>=0;i--) 
{ 
    for(k=len_1;k>=0;k--) 
    { 
     a = alphabet_to_integer(latter[i]); 
     b = alphabet_to_integer(former[k]); 
     c = a*b; 
     c = c * 10 + flag; 

     flag = c/10; 
     ch = integer_to_alphabet(c%10); 
     result_string = concat(ch,result_string); 
    } 
} 

,如果你想不只是2號,但10號(或更多) 你可以調用一次又一次str_multiply函數。

這是我第一次回答別人的問題。 所以我希望這個幫助比平常更多 謝謝!