我如何计算python中的大数字

时间:2012-11-09 10:52:54

标签: python

我正在寻找在python上计算大数字 但它不能。

像这样:

9999999999999999999999999999999999 ** 999999999999999999999999999999999999999999999999999

3 个答案:

答案 0 :(得分:5)

Python支持长整数,因此您只需打印表达式即可。它可能不如GMP或其他库有效,但您想要做的问题是无法计算该值:

(10**35 - 1) ** (10**52 - 1)约为10 ** (35 * 10**52),其中包含大约10**52位数。

让我们考虑一下我们可以假设的存储芯片有多大。月球质量约为7.34767309 * 10^22 kg,电子质量为9.10938188 * 10^(-31) kg。 我们假设我们可以使用电子来保存十进制数字。这意味着使用月亮作为记忆我们可以使用约8.066050130286116 * 10^52个电子。

这是什么意思?如果你有一个像月球一样大的超级RAM芯片,你将能够计算出这个数字。如果你得到它,对你有好处,否则如果你是一个凡人,你根本就不能希望有足够的记忆。

DecInt模块可以帮助您获得数百万到数百万的数字,但不仅仅是您需要特定的硬件而且数字更大(如您所示的示例)根本不可能。

答案 1 :(得分:2)

您可以尝试使用DecInt模块 可以找到here

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

答案 2 :(得分: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函数。

这是我第一次回答别人的问题。 所以我希望这比平时多得多 谢谢!