手搓高精度加法(python)
各位一定遇到个这样的情况: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+l2+j)%10)
j = (l1+l2+j)//10
if t == 0:
# 处理最高位的进位
ans.append(j)
# 将结果列表反转,因为我们是从低位到高位计算的
ans.reverse()
# 将结果列表中的每个元素转换为字符串
ans =
# 将结果列表中的字符串元素拼接成一个字符串,并转换为整数返回
return 这是子函数(t代表是否为小数1代表是,0代表否)def super_add(a,b):这是主函数
整体思路是模拟人类竖式计算。
听懂掌声!
页:
[1]