2012-11-09 33 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函数。

这是我第一次回答别人的问题。 所以我希望这个帮助比平常更多 谢谢!