题目分析

  1. 题目给出两个字符串,含义为两串数字
  2. 我们要返回数字加和之后的结果,以字符串的格式输出

方法一:python大整数处理

  • 实现思路
    • python语言支持大整数,不受位数限制

    • 因此转成整型之后直接相加即可


while True:
    try:
        n1 = int(input())
        n2 = int(input())
        print(n1+n2)		# 直接输出整型数字相加之和的结果
    except:
        break


复杂度分析

  • 时间复杂度:O(n)O(n),大整数加和内部实现的方式不是直接的加和,同样要以一定的数据结构和内存空间使用并分段加和
  • 空间复杂度:O(1)O(1),没有题目要求之外的其他辅助空间的开销

方法二:逐位相加进位

  • 实现思路
    • 我们将两个字符串从尾到头进行处理
    • 逐位相加,保留个位数字到结果字符串中,并记录进位的值在下一次循环中再次逐位相加
    • 最终输出结果字符串

alt


while True:
    try:
        s1 = list(map(int, input()))[::-1]
        s2 = list(map(int, input()))[::-1]
        res = ""
        i = 0                                    # 遍历指针
        addd = 0                                 # 进位
        summ = 0                                 # 和
        while i < max(len(s1), len(s2)):         # 开始遍历
            a = 0 if i >= len(s1) else s1[i]     # 获取s1中的一位数字
            b = 0 if i >= len(s2) else s2[i]     # 获取s2中的一位数字
            summ = (addd + a + b) % 10           # 计算和
            addd = (addd + a + b) // 10          # 计算进位
            res = str(summ) + res                # 组织到输出字符串中
            i += 1
        if addd > 0:                             # 处理最后一位
            res = "1" + res
        print(res)                               # 输出
    except:
        break
    

复杂度分析

  • 时间复杂度:O(n)O(n),一次遍历的时间开销,和字符串长度有关
  • 空间复杂度:O(1)O(1),没有题目要求范围之外的空间开销