解决思路:
- 找到两个数字字符串的小数点的位置,没有的补上 “.0”。
- 以小数点的位置给两个数字字符串补上0,让二者同等长度。
- 从右向左循环相加,组合成结果字符串,遇到小数点直接添加小数点。
- 将最后的进位与结果组合,正常最终结果
# num1, num2 两个字符串 def long_sum(num1,num2): #1 参数准备 carry = 0 # 默认进位为0 res = "" # 最后结果 #2 计算长度,与小数点位置 size1 = len(num1) log1 = num1.find('.') if log1 == -1: # 没有小数点,就对该数字字符串转化为小数字符串 size1 += 2 num1 += ".0" log1 = size1- 2 size2 = len(num2) log2 = num2.find('.') if log2 == -1: size2 += 2 num2 += ".0" log2 = size2- 2 # print(num1,num2,) # 补齐小数点 1234.56 123456.0 # 3补全字符串 # 3.1 整数部分补齐 temp = log2-log1 if temp > 0: num1 = "0"*(temp) + num1 else: num2 = "0"*(temp*-1) + num2 # 3.2 小数部分补全 temp = size2-1-log2 - (size1 - 1- log1) if temp>0: num1 = num1 + "0"*(temp) else: num2 = num2 + "0"*(temp*-1) # print(num1,num2,) # 补全后 001234.56 123456.00 #4 循环计算 for n in range(len(num1)-1,-1,-1): # a 求和 if num1[n] == "." or num2[n] == ".": res = "." + res continue temp = int(num1[n]) + int(num2[n]) + carry # b 求模 carry = temp // 10 # c 求余 并赋值 res = str(temp % 10) + res if carry > 0: res = carry + res return res print(long_sum('123456', '123456'))