Python实现一元多项式的加减乘除
一元多项式Am(x)和Bn(X),的加法、减法和乘法运算。其中多项式描述为:
Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm;
Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。
python
运行效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HCqt8CV9-1720826883199)(https://i-blog.csdnimg.cn/direct/a1212b33887940f785b27e1743716e37.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERAd0i8w-1720826883200)(https://i-blog.csdnimg.cn/direct/6d429a5b87794956b7db4119ea2ee106.png)]
代码
class Polynomial:
def __init__(self):
self.terms = {}
def add_term(self, coef, exp):
if exp in self.terms:
self.terms[exp] += coef
else:
self.terms[exp] = coef
def print_polynomial(self):
if not self.terms:
print("0")
return
terms_str = []
for exp in sorted(self.terms, reverse=True):
coef = self.terms[exp]
if coef == 0: # Skip zero coefficients
continue
elif exp == 0:
terms_str.append(f"{coef}")
elif exp == 1:
terms_str.append(f"{coef}x" if coef != 1 else "x")
else:
terms_str.append(f"{coef}x^{exp}" if coef != 1 else f"x^{exp}")
polynomial_str = " + ".join(terms_str).replace("+ -", "- ")
print(polynomial_str)
def add_polynomials(self, poly1, poly2):
result = Polynomial()
result.terms = poly1.terms.copy()
for exp, coef in poly2.terms.items():
if exp in result.terms:
result.terms[exp] += coef
else:
result.terms[exp] = coef
return result
def subtract_polynomials(self, poly1, poly2):
result = Polynomial()
result.terms = poly1.terms.copy()
for exp, coef in poly2.terms.items():
if exp in result.terms:
result.terms[exp] -= coef
else:
result.terms[exp] = -coef
return result
def multiply_polynomials(self, poly1, poly2):
result = Polynomial()
for exp1, coef1 in poly1.terms.items():
for exp2, coef2 in poly2.terms.items():
new_coef = coef1 * coef2
new_exp = exp1 + exp2
if new_exp in result.terms:
result.terms[new_exp] += new_coef
else:
result.terms[new_exp] = new_coef
return result
poly1 = Polynomial()
poly2 = Polynomial()
print("第一个多项式")
while True:
try:
line = input()
if line.strip() == "":
break
coef, exp = map(int, line.split())
poly1.add_term(coef, exp)
except EOFError:
break
print("第二个多项式")
while True:
try:
line = input()
if line.strip() == "":
break
coef, exp = map(int, line.split())
poly2.add_term(coef, exp)
except EOFError:
break
print("多项式一:", end=" ")
poly1.print_polynomial()
print("多项式二:", end=" ")
poly2.print_polynomial()
sum_poly = poly1.add_polynomials(poly1, poly2)
print("和:", end=" ")
sum_poly.print_polynomial()
diff_poly = poly1.subtract_polynomials(poly1, poly2)
print("差:", end=" ")
diff_poly.print_polynomial()
product_poly = poly1.multiply_polynomials(poly1, poly2)
print("积:", end=" ")
product_poly.print_polynomial()
- add_term(self, coef, exp):
这个方法用于向多项式中添加一个新的项。它以系数coef和指数exp作为参数,将新的项添加到self.terms字典中。如果已经存在相同指数的项,则将其系数累加到现有项上。 - print_polynomial(self):
这个方法用于打印多项式的字符串表示。它首先检查self.terms是否为空,如果为空则直接打印"0"。然后遍历self.terms中的所有项,并根据系数和指数构建出多项式的字符串表示。最后打印出整个多项式的字符串表示。 - add_polynomials(self, poly1, poly2):
这个方法用于将两个多项式相加。它创建一个新的Polynomial对象result,并将poly1的所有项复制到result.terms中。然后遍历poly2的所有项,如果result.terms中已经存在相同指数的项,则将其系数累加到该项上;否则,将新的项添加到result.terms中。最后,返回相加后的结果多项式result。 - subtract_polynomials(self, poly1, poly2):
这个方法用于将两个多项式相减。它的实现与add_polynomials方法类似,但在处理poly2的项时,将其系数减去而不是相加。最后,返回相减后的结果多项式result。 - multiply_polynomials(self, poly1, poly2):
这个方法用于将两个多项式相乘。它创建一个新的Polynomial对象result,并遍历poly1和poly2的所有项,计算出新项的系数和指数。新项的系数是poly1项的系数与poly2项的系数相乘,新项的指数是poly1项的指数与poly2项的指数相加。如果result.terms中已经存在相同指数的项,则将新的系数累加到该项上;否则,将新的项添加到result.terms中。最后,返回相乘后的结果多项式result。
C语言
运行效果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sFvKVE5o-1720826883201)(https://i-blog.csdnimg.cn/direct/61dc05f295594979a1e5ce1f4de960c4.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4xcjvnck-1720826883201)(https://i-blog.csdnimg.cn/direct/cfc1294f666241c78dcf5afb30c3b9f3.png)]
代码
#include <stdio.h>
#include <stdlib.h>
// ����ʽ��㶨��
typedef struct PolyNode {
int coef; // ϵ��
int exp; // ָ��
struct PolyNode* next;
} PolyNode;
// ����ʽ������
typedef struct {
PolyNode* head;
} Polynomial;
// ��ʼ������ʽ����
void initPolynomial(Polynomial* poly) {
poly->head = (PolyNode*)malloc(sizeof(PolyNode));
poly->head->next = NULL;
}
// �ͷŶ���ʽ������ڴ�
void freePolynomial(Polynomial* poly) {
PolyNode* p = poly->head;
while (p != NULL) {
PolyNode* temp = p->next;
free(p);
p = temp;
}
}
// �ڶ���ʽ����ĩβ�����½��
void insertTerm(Polynomial* poly, int coef, int exp) {
PolyNode* newNode = (PolyNode*)malloc(sizeof(PolyNode));
newNode->coef = coef;
newNode->exp = exp;
newNode->next = NULL;
PolyNode* p = poly->head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
// ��ӡ����ʽ
void printPolynomial(Polynomial* poly) {
PolyNode* p = poly->head->next;
int isFirstTerm = 1;
while (p != NULL) {
if (!isFirstTerm && p->coef > 0) {
printf(" + ");
}
if (p->exp == 0) {
printf("%d", p->coef);
} else if (p->exp == 1) {
printf("%dx", p->coef);
} else {
printf("%dx^%d", p->coef, p->exp);
}
isFirstTerm = 0;
p = p->next;
}
printf("\n");
}
// ����ʽ���
Polynomial addPolynomials(Polynomial* poly1, Polynomial* poly2) {
Polynomial result;
initPolynomial(&result);
PolyNode* p1 = poly1->head->next;
PolyNode* p2 = poly2->head->next;
while (p1 != NULL && p2 != NULL) {
if (p1->exp < p2->exp) {
insertTerm(&result, p1->coef, p1->exp);
p1 = p1->next;
} else if (p1->exp > p2->exp) {
insertTerm(&result, p2->coef, p2->exp);
p2 = p2->next;
} else {
int sum = p1->coef + p2->coef;
if (sum != 0) {
insertTerm(&result, sum, p1->exp);
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
insertTerm(&result, p1->coef, p1->exp);
p1 = p1->next;
}
while (p2 != NULL) {
insertTerm(&result, p2->coef, p2->exp);
p2 = p2->next;
}
return result;
}
// ����ʽ���
Polynomial subtractPolynomials(Polynomial* poly1, Polynomial* poly2) {
Polynomial result;
initPolynomial(&result);
PolyNode* p1 = poly1->head->next;
PolyNode* p2 = poly2->head->next;
while (p1 != NULL && p2 != NULL) {
if (p1->exp < p2->exp) {
insertTerm(&result, p1->coef, p1->exp);
p1 = p1->next;
} else if (p1->exp > p2->exp) {
insertTerm(&result, -p2->coef, p2->exp);
p2 = p2->next;
} else {
int diff = p1->coef - p2->coef;
if (diff != 0) {
insertTerm(&result, diff, p1->exp);
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
insertTerm(&result, p1->coef, p1->exp);
p1 = p1->next;
}
while (p2 != NULL) {
insertTerm(&result, -p2->coef, p2->exp);
p2 = p2->next;
}
return result;
}
// ����ʽ���
Polynomial multiplyPolynomials(Polynomial* poly1, Polynomial* poly2) {
Polynomial result;
initPolynomial(&result);
PolyNode* p1 = poly1->head->next;
while (p1 != NULL) {
PolyNode* p2 = poly2->head->next;
Polynomial temp;
initPolynomial(&temp);
while (p2 != NULL) {
int coef = p1->coef * p2->coef;
int exp = p1->exp + p2->exp;
insertTerm(&temp, coef, exp);
p2 = p2->next;
}
result = addPolynomials(&result, &temp);
freePolynomial(&temp);
p1 = p1->next;
}
return result;
}
int main() {
Polynomial poly1, poly2;
initPolynomial(&poly1);
initPolynomial(&poly2);
// �Ӽ����������ʽ1��ϵ����ָ���������뵽������
printf("Enter polynomial 1 (coefficients and exponents):\n");
int coef, exp;
while (scanf("%d%d", &coef, &exp) == 2) {
insertTerm(&poly1, coef, exp);
}
getchar(); // ������뻺�����Ļ��з�
// �Ӽ����������ʽ2��ϵ����ָ���������뵽������
printf("Enter polynomial 2 (coefficients and exponents):\n");
while (scanf("%d%d", &coef, &exp) == 2) {
insertTerm(&poly2, coef, exp);
}
printf("Polynomial 1: ");
printPolynomial(&poly1);
printf("Polynomial 2: ");
printPolynomial(&poly2);
Polynomial sum = addPolynomials(&poly1, &poly2);
printf("Sum: ");
printPolynomial(&sum);
Polynomial diff = subtractPolynomials(&poly1, &poly2);
printf("Difference: ");
printPolynomial(&diff);
Polynomial product = multiplyPolynomials(&poly1, &poly2);
printf("Product: ");
printPolynomial(&product);
freePolynomial(&poly1);
freePolynomial(&poly2);
freePolynomial(&sum);
freePolynomial(&diff);
freePolynomial(&product);
return 0;
}