设计一个多项式相加的代码,指数项为0的不显示,指数项为1的1也不显示
时间: 2023-05-27 15:06:49 浏览: 40
假设我们有两个多项式 poly1 和 poly2,它们都是一个列表,每个元素都是一个二元组 (coefficient, exponent),表示多项式中的一个单项式。例如,poly1 = [(3, 2), (-1, 1), (4, 0)] 表示多项式 3x^2 - x + 4。
下面是一个实现多项式相加的代码:
def add_polynomials(poly1, poly2):
result = []
i, j = 0, 0
while i < len(poly1) and j < len(poly2):
coeff1, exp1 = poly1[i]
coeff2, exp2 = poly2[j]
if exp1 < exp2:
result.append((coeff1, exp1))
i += 1
elif exp1 > exp2:
result.append((coeff2, exp2))
j += 1
else:
coeff = coeff1 + coeff2
if coeff != 0:
result.append((coeff, exp1))
i += 1
j += 1
while i < len(poly1):
result.append(poly1[i])
i += 1
while j < len(poly2):
result.append(poly2[j])
j += 1
return [(coeff, exp) for coeff, exp in result if exp != 0 and coeff != 1]
这个代码首先初始化一个空列表 result,然后使用两个指针 i 和 j 分别指向 poly1 和 poly2 的起始位置。然后进行循环,直到其中一个多项式处理完毕。在循环中,我们比较当前指针所指向的两个单项式的指数大小,如果小于,则将第一个多项式的单项式加入结果列表中,并将第一个指针 i 向后移动一位;如果大于,则将第二个多项式的单项式加入结果列表中,并将第二个指针 j 向后移动一位;如果相等,则将两个单项式的系数相加,并将结果加入结果列表中,然后将两个指针同时向后移动一位。
循环结束后,我们还需要将剩余的单项式加入结果列表中。最后,我们使用列表推导式过滤掉指数为 0 或系数为 1 且指数为 1 的单项式,然后返回结果列表。
例如,如果我们有两个多项式:
poly1 = [(3, 2), (-1, 1), (4, 0)] # 3x^2 - x + 4
poly2 = [(2, 2), (5, 1), (-2, 0)] # 2x^2 + 5x - 2
那么调用 add_polynomials(poly1, poly2) 将返回:
[(5, 2), (4, 1), (2, 0)] # 5x^2 + 4x + 2