-4

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

像这样:

9999999999999999999999999999999999**9999999999999999999999999999999999999999999999999999

4

3 回答 3

7

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

(10**35 - 1) ** (10**52 - 1)大约是10 ** (35 * 10**52)其中包含大约10**52数字。

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

这是什么意思?如果你有一个和月球一样大的超级 RAM 芯片,你就可以计算出这个数字。如果你明白了,对你有好处,否则如果你是凡人,你根本无法指望有足够的记忆。

DecInt模块可以帮助您处理 100k 到数百万位的数字,但除此之外,您还需要特定的硬件和更大的数字(如您展示的示例)根本不可能。

于 2012-11-09T11:17:34.770 回答
2

您可以尝试使用DecInt模块。
可以在这里找到

import DecInt
bignum = DecInt.DecInt(9999999999999999) ** 999999999999999999999
print str(bignum)
于 2012-11-09T11:07:22.497 回答
0

为什么不将数字作为字符串并创建与人的手类似的功能,与字符串相乘。

假设您制作了 2 个字符串“99876”和“123”

并制作以 2 个参数为参数的 str_multiply 函数

获取后者的字符串长度。“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 函数。

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

于 2012-11-09T11:18:34.860 回答