各位一定遇到个这样的情况:0.1+0.2=0.30000000000000001
想要解决只有2个办法:
1、大力出奇迹:缩减精度
2、高精度加法
今天我就来教大家手搓高精加:
- def super_add_sub(a,b,t):
- ca = a
- cb = b
- l1 = []
- l2 = []
- ans = []
-
- # 将数字a的每一位拆分存入列表l1中
- while ca != 0:
- l1.append(ca%10)
- ca = ca//10
-
- # 将数字b的每一位拆分存入列表l2中
- while cb != 0:
- l2.append(cb%10)
- cb = cb//10
-
- j = 0 # 初始化进位为0
-
- # 如果l1的长度小于l2的长度,则在l1末尾补0,使得l1和l2长度相等
- while len(l1) < len(l2):
- l1.append(0)
-
- # 如果l2的长度小于l1的长度,则在l2末尾补0,使得l1和l2长度相等
- while len(l2) < len(l1):
- l2.append(0)
-
- # 逐位相加,并处理进位
- for i in range(len(l1)):
- ans.append((l1[i]+l2[i]+j)%10)
- j = (l1[i]+l2[i]+j)//10
-
- if t == 0:
- # 处理最高位的进位
- ans.append(j)
-
- # 将结果列表反转,因为我们是从低位到高位计算的
- ans.reverse()
-
- # 将结果列表中的每个元素转换为字符串
- ans = [str(i) for i in ans]
-
- # 将结果列表中的字符串元素拼接成一个字符串,并转换为整数返回
- return [int("".join(ans)),j]
复制代码
这是子函数(t代表是否为小数1代表是,0代表否)复制代码 这是主函数
整体思路是模拟人类竖式计算。
听懂掌声!
|