首先,如果面对2**512,2**1000等这样大的数据,我们怎么进行相关的运算操作呢?
我首先想到的是list列表来进行存储,我们都知道列表的长度是无限的
下面代码参考了:https://blog.csdn.net/qdPython/article/details/108964123,https://www.manongdao.com/article-2400992.html等
直接看重要代码:
对于正负号的处理
def fuhao(data1, data2):
list_data1 = list(data1)
list_data2 = list(data2)
if (data2[0] == "-" and data1[0]!="-"): #第一个为正数,第二个数为负数的情况
# print("第一个为正数,第二个数为负数的情况")
p1 = data1[::1]
p2 = data2[1::1]
list_data2 = list(data2)
list_data2 = ''.join(list_data2)
list_data1 = list(data1)
list_data1 = ''.join(list_data1)
elif (data1[0]=="-" and data2[0]!="-"): #第一个数为负数,第二个数为正数的情况
# print("第一个数为负数,第二个数为正数的情况")
p1 = data1[1::1]
p2 = data2[::1]
list_data2 = list(data2)
list_data2 = ''.join(list_data2)
list_data1 = list(data1)
list_data1 = ''.join(list_data1)
elif (data1[0] == "-" and data2[0] == '-'): #两个数都是负数的情况
# print("两个数都是负数的情况")
p1 = data1[1::]
p2 = data2[1::]
else:
p1 = data1[::1]
p2 = data2[::1]
list_data1 = list(p1)
list_data1 = ''.join(list_data1)
list_data2 = list(p2)
list_data2 = ''.join(list_data2)
global datas1, datas2
datas1 = list_data1
datas2 = list_data2
global len_data1, len_data2
len_data1 = len(p1)
len_data2 = len(p2)
位数对齐(补0操作)
if len_data1 > len_data2:
lc = len_data1 - len_data2
datas2 = '{}{}'.format(r'0' * lc, datas2)
elif len_data1 < len_data2:
lc = len_data2 - len_data1
datas1 = '{}{}'.format(r'0' * lc, datas1)
进位操作
# 初始化长度与计算长度相同,零填充
c=len(a) if len(a)>len(b) else len(b)
sum_list = sum_list * (c+1)
#两个数进行相加的操作,将两个负数也视为两个正数的相加
def add_data(str1,str2):
for i, v in enumerate(str1):
# sum_list[i] 为进位,所以每次加上进位
v_add = int(str2[i]) + int(v) + sum_list[i]
if v_add >= 10:
m, va = divmod(v_add, 10)
sum_list[i] = va
sum_list[i+1] = m
else:
# 没有进位,无需累加,直接写值
sum_list[i] = v_add
........................然后是一些判断、转化等操作,此处省略,有需要的朋友私聊
