1任务
两个任意长度的大整数相加。
2任务实现
用字符串存储数据,Python原生支持大整数相加,不需要额外写代码处理。
在 Python 中,整数(int 类型)的位数没有固定上限,它的大小仅受限于你的计算机的可用内存。这一点和很多其他编程语言(如 C/C++、Java)有本质区别 —— 这些语言的整数类型(如 int、long)有固定的位数限制(比如 32 位、64 位),超出范围就会溢出。
Python 会动态地为大整数分配内存,只要你的内存足够,就能存储任意位数的整数。
Python的整数类型本身就是“大整数”,可以直接进行运算:

手动用算法实现,可以用模拟竖式加法的思路来写代码;
两个大数(字符串)右对齐,左侧用若干零补全。
代码如下:
def bigintAdd(num1: str, num2: str) -> str:
"""
实现大数相加,支持任意长度的数字字符串相加
Args:
num1: 第一个大数(字符串形式,仅包含数字)
num2: 第二个大数(字符串形式,仅包含数字)
"""
# 输入校验:确保输入都是纯数字字符串
if not (num1.isdigit() and num2.isdigit()):
raise ValueError("输入必须是纯数字字符串")
# 初始化指针(指向两个数字的末尾)、进位、结果列表
i,j = len(num1) - 1,len(num2)-1
carry = 0
result = []
# 循环条件:只要还有未处理的位,或还有进位
while i >= 0 or j >= 0 or carry > 0:
# 取出当前位的数字(指针越界则取0)
digit1 = int(num1[i]) if i >= 0 else 0
digit2 = int(num2[j]) if j >= 0 else 0
# 计算当前位的和(包含进位)
total = digit1 + digit2 + carry
# 当前位的结果:取和的个位
current_digit = total % 10
# 更新进位:取和的十位(整除10)
carry = total // 10
# 将当前位结果加入列表(后续需要反转)
result.append(str(current_digit))
# 指针左移,处理下一位
i -= 1
j -= 1
# 反转结果列表并拼接成字符串(因为是从个位开始存的)
return ''.join(reversed(result))
# 测试用例
if __name__ == "__main__":
# 测试用例1:普通数字相加
num1 = "12345678901234567890"
num2 = "98765432109876543210"
print(f"{num1} + {num2} = {bigintAdd(num1, num2)}")
# 输出:111111111011111111100

921

被折叠的 条评论
为什么被折叠?



