if (q->coef == 1)
{
if (q->expn == 0) printf("1");
else if (q->expn == 1) printf("x");
else printf("x^%d", q->expn);
}
if (q->coef == -1)
{
if (q->expn == 0) printf("-1");
else if (q->expn == 1) printf("-x");
else printf("-x^%d", q->expn);
}
}
q = q->next;
}
printf("\n");
}
int compare(Polyn a, Polyn b)//比较两个多项式的大小
{
if (a&&b) // 多项式a和b均不为空
{
if (a->expn > b->expn) return 1;// a的指数大于b的指数
else if (a->expn < b->expn) return -1;
else return 0;
}
else if (!a&&b) return -1; //a为空,b不为空
else if (a&&!b) return 1; //b为空,a不为空
else if (!a&&!b)return 0; //a,b均为空
}
Polyn addPolyn(Polyn a, Polyn b) //求解a+b,并返回头结点head
{
Polyn head ,qc;
Polyn qa = a->next;
Polyn qb = b->next;
Polyn hc=(Polyn)malloc(sizeof(Polynomial));
hc->next = NULL;
head = hc;
while (qa || qb)
{
qc= (Polyn)malloc(sizeof(Polynomial));
if (compare(qa, qb) == 1)
{
qc->coef = qa->coef;
qc->expn = qa->expn;
qa = qa->next;
}
else if (compare(qa, qb) == 0) //指数相同,直接相加
{
qc->coef = qa->coef + qb->coef;
qc->expn = qa->expn ;
qa = qa->next;
qb = qb->next;
}
else
{
qc->coef = qb->coef;
qc->expn = qb->expn;
qb = qb->next;
}
if (qc->coef != 0) //将该节点插入链表中
{
qc->next = hc->next;
hc->next = qc;
hc = qc;
}
else free(qc);
}
return head;
}
Polyn subPolyn(Polyn a, Polyn b)
{
Polyn h = b;
Polyn p = b->next;
while(p)
{
p->coef *= -1;
p = p->next;
}
Polyn head = addPolyn(a, h);
for (Polyn i = h->next; i != 0; i = i->next)
{
i->coef *= -1;
}
return head;
}
double value(Polyn head, int x) //计算x的值
{
double sum = 0;
for (Polyn p = head->next; p != 0; p = p->next)
{
int tmp = 1;
int expn = p->expn;
while(expn != 0) //指数不为0
{
if (expn < 0) tmp /= x, expn++;
else if(expn>0) tmp *= x, expn--;
}
sum += p->coef*tmp;
}
return sum;
}
int main()
{
int m;
Polyn a = 0, b = 0;
printf("请输入a的项数:");
scanf("%d", &m);
a =