我正在寻找在 python 上计算大数字,但它不能。
像这样:
9999999999999999999999999999999999**9999999999999999999999999999999999999999999999999999
我正在寻找在 python 上计算大数字,但它不能。
像这样:
9999999999999999999999999999999999**9999999999999999999999999999999999999999999999999999
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 到数百万位的数字,但除此之外,您还需要特定的硬件和更大的数字(如您展示的示例)根本不可能。
您可以尝试使用DecInt
模块。
可以在这里找到
import DecInt
bignum = DecInt.DecInt(9999999999999999) ** 999999999999999999999
print str(bignum)
为什么不将数字作为字符串并创建与人的手类似的功能,与字符串相乘。
假设您制作了 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 函数。
这是我第一次回答别人的问题。所以我希望这比平时更有帮助,谢谢!