""" 字符串相加 需自行实现算法计算两个字符串相加结果, 不可以使用把字符串直接转成整数后相加。 """ 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)}') # 输出两个大数相加的结果
评论前必须登录!
注册