多项式结构
typedef struct Node *Polynomial;
struct Node
{
int Coefficient;
int Exponent;
Polynomial Next;
};
初始化和打印多项式
Polynomial PolyCreat()
{
int s;
printf("请输入项数:");
scanf("%d", &s);
Polynomial Poly, P;
Poly = (Polynomial)malloc(sizeof(struct Node));
Poly->Next = NULL;
P = Poly;
int m, n;
Polynomial newPoly;
for (int i = 0; i < s; i++)
{
scanf("%d %d", &m, &n);
newPoly = (Polynomial)malloc(sizeof(struct Node));
newPoly->Coefficient = m;
newPoly->Exponent = n;
newPoly->Next = P->Next;
P->Next = newPoly;
P = P->Next;
}
return Poly;
}
void PolyPrint(Polynomial Poly)
{
Polynomial P;
P = Poly->Next;
while (P != NULL)
{
printf("%d %d ", P->Coefficient, P->Exponent);
P = P->Next;
}
printf("\n------------\n");
}
加法
void PolynomialAdd(Polynomial Poly1, Polynomial Poly2)
{
Polynomial P1, P2, P, end, t;
P1 = Poly1->Next;
P2 = Poly2->Next;
P = (Polynomial)malloc(sizeof(struct Node));
P->Next = NULL;
end = P;
while (P1 != NULL && P2 != NULL)
{
if (P1->Exponent == P2->Exponent)
{
if (P1->Coefficient + P2->Coefficient != 0)
{
t = (Polynomial)malloc(sizeof(struct Node));
t->Coefficient = P1->Coefficient + P2->Coefficient;
t->Exponent = P1->Exponent;
t->Next = end->Next;
end->Next = t;
end = end->Next;
}
P1 = P1->Next;
P2 = P2->Next;
}
else if (P1->Exponent > P2->Exponent)
{
end->Next = P1;
end = P1;
P1 = P1->Next;
}
else
{
end->Next = P2;
end = P2;
P2 = P2->Next;
}
}
if (P1 != NULL)
end->Next = P1;
else
end->Next = P2;
printf("结果:\n");
PolyPrint(P);
}
void PolyMult(Polynomial Poly1, Polynomial Poly2)
{
Polynomial P1, P2, P, t, q, end;
P1 = Poly1->Next;
P2 = Poly2->Next;
P = (Polynomial)malloc(sizeof(struct Node));
P->Next = NULL;
end = P;
int flag = 1;
while (P1 != NULL)
{
P2 = Poly2->Next;
while (P2 != NULL)
{
int c, e;
c = P1->Coefficient * P2->Coefficient;
e = P1->Exponent + P2->Exponent;
if (flag)
{
flag = 0;
t = (Polynomial)malloc(sizeof(struct Node));
t->Coefficient = c;
t->Exponent = e;
t->Next = end->Next;
end->Next = t;
end = end->Next;
}
else
{
q = P;
while (q->Next != NULL&&q->Next->Exponent > e)
q = q->Next;
if (q->Next!=NULL&&q->Next->Exponent == e)
{
if (q->Next->Coefficient+c==0)
{
q->Next = q->Next->Next;
free(q->Next);
}
else
q->Next->Coefficient = q->Next->Coefficient + c;
}
else
{
t = (Polynomial)malloc(sizeof(struct Node));
t->Coefficient = c;
t->Exponent = e;
t->Next = q->Next;
q->Next = t;
}
}
P2 = P2->Next;
}
P1 = P1->Next;
}
PolyPrint(P);
}
主函数
int main()
{
Polynomial P1, P2;
P1 = PolyCreat();
P2 = PolyCreat();
PolyMult(P1, P2);
}
样例
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
//5 20 -4 4 -5 2 9 1 -2 0
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1