我想在python中添加两个非常大的数字,即使bignum也无法处理

Sid*_*hal 1 python-2.7 python-3.x

我是Python新手,我想在Python中添加两个非常大的数字,即使bignum也无法处理。我可以将这两个数字作为一个字符串,然后可以从末尾开始计算,就像我们过去在老式加法过程中所做的那样。我们可以将车厢添加到下一个数字中,依此类推。请协助。

AKX*_*AKX 7

对于圣诞节编程小吃来说,这个问题似乎很有趣。

这是我使用 Python 中的许多内置函数实现的。

  • reversed用于从右到左迭代数字序列,即就像我们在纸上计算时一样
  • zip_longest用零“填充”序列的末尾(因为我们会忽略纸上的数字)
  • divmod计算单次调用中的结转值和当前数字。
  • 结果被反转,因此再次反转为最后有效数字,并使用 删除左侧的杂散零lstrip

但它不处理负数。


from itertools import zip_longest


def add(a, b):
    out = []
    a = [int(c) for c in str(a)]
    b = [int(c) for c in str(b)]
    carry = 0
    for ca, cb in zip_longest(reversed(a), reversed(b), fillvalue=0):
        carry, digit = divmod(ca + cb + carry, 10)
        out.append(str(digit))
    return "".join(reversed(out)).lstrip("0")


a = 9999 ** 29
b = 3725241 ** 9

assert add(a, b) == str(a + b)
Run Code Online (Sandbox Code Playgroud)