"""
字符串相加
需自行实现算法计算两个字符串相加结果,
不可以使用把字符串直接转成整数后相加。
"""
def string_zeroize(s1: str, s2: str):
"""
使两个字符串长度相等,不足的部分用0填充。
参数:
s1: str - 第一个字符串
s2: str - 第二个字符串
返回:
tuple - 填充后长度相等的两个字符串元组
"""
s1_length = len(s1)
s2_length = len(s2)
if s1_length > s2_length:
s2 = '0' * (s1_length - s2_length) + s2
else:
s1 = '0' * (s2_length - s1_length) + s1
return s1, s2
def string_sum(s1: str, s2: str):
"""
计算两个大字符串表示的数字的和。
参数:
s1: str - 第一个字符串表示的数字
s2: str - 第二个字符串表示的数字
返回:
str - 两个数字相加后的结果字符串
"""
# 首先使两个字符串长度相等,以便进行逐位相加
s1, s2 = string_zeroize(s1, s2)
result = []
index = len(s1) - 1
carry = 0 # 进位初始化为0
# 从最低位开始,逐位相加,考虑进位
while index >= 0:
item_sum = int(s1[index]) + int(s2[index]) + carry
carry = item_sum // 10 # 计算进位
current = item_sum % 10 # 获取当前位的值
result.insert(0, str(current)) # 将当前位的值插入结果列表的最前面
index -= 1
# 如果最高位有进位,将其添加到结果中
if carry > 0:
result.insert(0, str(carry))
return ''.join(result)
if __name__ == '__main__':
s1 = '912345678900987654321'
s2 = '112345678900987654321'
print(f'输出两个大数相加的结果:{string_sum(s1, s2)}') # 输出两个大数相加的结果
评论前必须登录!
注册