Sid*_*hal 1 python-2.7 python-3.x
我是Python新手,我想在Python中添加两个非常大的数字,即使bignum也无法处理。我可以将这两个数字作为一个字符串,然后可以从末尾开始计算,就像我们过去在老式加法过程中所做的那样。我们可以将车厢添加到下一个数字中,依此类推。请协助。
对于圣诞节编程小吃来说,这个问题似乎很有趣。
这是我使用 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)
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |