Python实现高精度加减乘除运算
Mkdir700• 年 12 月 12 日
Loading...
今天实验课,要求的这个作业
## 完整代码 ##
目前完整写完了加法
```python
class High_Precision_Operation(object):
# 加法
def p_add(self, a, b):
sign = False
a_list_int, a_list_float, b_list_int, b_list_float = self.modify(a, b)
a_list_int, b_list_int = a_list_int[::-1], b_list_int[::-1]
# 整数部分相加
for i in range(len(b_list_int)-1):
a_list_int[i] = a_list_int[i] + b_list_int[i]
if a_list_int[i] >= 10:
a_list_int[i] %= 10
a_list_int[i+1] += 1
else:
a_list_int[i+1] += 0
# 小数部分相加
for i in range(len(b_list_float)-1,-1,-1):
a_list_float[i] = a_list_float[i] + b_list_float[i]
if a_list_float[i] >= 10:
a_list_float[i] %=10
a_list_float[i-1] += 1
if a_list_float[0] + b_list_float[0] >=10:
a_list_float[i] %= 10
sign = True
a_list_int = a_list_int[::-1]
num = self.int_float(a_list_int, a_list_float)
if sign == True:
num + 1
print(num)
# 减法
def p_sub(self, a, b):
sign = False
sign1 = False
# if a < b:
# a, b = b, a
# sign = True
a_list_int, a_list_float, b_list_int, b_list_float = self.modify(a, b)
a_list_int, b_list_int = a_list_int[::-1], b_list_int[::-1]
# 整数部分相减
for i in range(len(a_list_int)):
a_list_int[i] = a_list_int[i] - a_list_int[i]
if a_list_int[i] < 0:
a_list_int[i] = 10 + a_list_int[i]
a_list_int[i+1] -= 1
# 小数部分相减
for i in range(len(a_list_float)-1,-1,-1):
a_list_float[i] = a_list_float[i] - a_list_float[i]
if a_list_float[i] < 0:
a_list_float = 10 + a_list_float[i]
a_list_float[i-1] -= 1
if a_list_float[0] - b_list_float[0] < 0:
a_list_float[i] = 10 + a_list_float[i]
sign1 = True
a_list_int = a_list_int[::-1]
num = self.int_float(a_list_int, a_list_float)
if sign1 == True:
num -= 1
# if sign == True:
# print(self.list2num(a_list)-2*self.list2num(a_list))
print(num)
# 乘法
def p_multi(self,a, b):
pass
# 修正统一数字在列表中的长度
def modify(self, a, b):
# 将数字转换成字符串
a_list, b_list = '00' + str(a), '00' + str(b) # 字符串转为列表
a_list_int, a_list_float = a_list.split(".")
b_list_int, b_list_float = b_list.split(".")
a_list_int, a_list_float = self.list2int(list(a_list_int)), self.list2int(list(a_list_float)) # 将列表内的字符转为数字
b_list_int, b_list_float = self.list2int(list(b_list_int)), self.list2int(list(b_list_float)) # 将列表内的字符转为数字
# 比较两个列表的长度
a_list_int, b_list_int = self.differ_int(len(a_list_int), len(b_list_int), a_list_int, b_list_int)
a_list_float, b_list_float = self.differ_float(len(a_list_float), len(b_list_float), a_list_float, b_list_float)
print(a_list_int, a_list_float)
print(b_list_int, b_list_float)
# a_list, b_list = a_list[::-1], b_list[::-1]
return a_list_int, a_list_float, b_list_int, b_list_float
# 将两个列表对齐-整数部分
def differ_int(self, l1, l2, la, lb):
if l1 > l2:
differ = l1 - l2
lb = lb[::-1]
for i in range(differ):
lb.append(0)
lb = lb[::-1]
elif l1 < l2:
differ = l2 - l1
la = la[::-1]
for i in range(differ):
la.append(0)
la = la[::-1]
return la, lb
# 将两个列表对齐-小数部分
def differ_float(self, l1, l2, la, lb):
if l1 > l2:
differ = l1 - l2
for i in range(differ):
lb.append(0)
elif l1 < l2:
differ = l2 - l1
for i in range(differ):
la.append(0)
return la, lb
# 将列表内的数组字符转化成数字
def list2int(self, list):
for i in range(len(list)):
list[i] = int(list[i])
return list
# 将一个数字列表转换为一个int类型的数字
def list2num(self, list):
num = 0
for i in list:
num = num * 10 + i
return num
def int_float(self, int, float):
int = self.list2num(int)
length = len(float)
float = self.list2num(float)
float = float * (0.1 ** length)
return int+float
```
## 加法 ##
![Animation.gif][1]
```python
def p_add(self, a, b):
sign = False
a_list_int, a_list_float, b_list_int, b_list_float = self.modify(a, b)
a_list_int, b_list_int = a_list_int[::-1], b_list_int[::-1]
# 整数部分相加
for i in range(len(b_list_int)-1):
a_list_int[i] = a_list_int[i] + b_list_int[i]
if a_list_int[i] >= 10:
a_list_int[i] %= 10
a_list_int[i+1] += 1
else:
a_list_int[i+1] += 0
# 小数部分相加
for i in range(len(b_list_float)-1,-1,-1):
a_list_float[i] = a_list_float[i] + b_list_float[i]
if a_list_float[i] >= 10:
a_list_float[i] %=10
a_list_float[i-1] += 1
if a_list_float[0] + b_list_float[0] >=10:
a_list_float[i] %= 10
sign = True
a_list_int = a_list_int[::-1]
num = self.int_float(a_list_int, a_list_float)
if sign == True:
num + 1
print(num)
```
[1]: /usr/uploads//12/3375512611.gif