问题描述
给定两个多项式,求解其和与差。多项式的项数为M,而最高幂次为N。(1<=M<=10,1<=N<=1000000)
输入说明
输入包含了两个多项式,分为两行给出(同行数据间以空格隔开):
每一行为两组数据:第一组为一个值,表示多项式的非零项数M;第二组为2*M个值,每相邻两个值表达一个多项式的非零系数项,分别为系数值、幂次值(其中各项按照幂次的降序排列)。但如果多项式没有非零系数项,则仅用0(M的值)表示,后面没有系数和幂次值出现。例如,第一行的数据为:4 1 10 2 5 3 4 4 0,那么表示多项式有4项,对应的多项式为:x^10+2x^5+3x^4+4. 又例如,第二行的数据为:4 1 8 -2 5 3 3 4 1,表示多项式有4项,对应的多项式为:x^8-2x^5+3x^3+4x。那么上述两个多项式相加的输出结果应为:6 1 10 1 8 3 4 3 3 4 1 4 0,对应的多项式为:x^10+x^8+3x^4+3x^3+4x+4.第一个多项式减去第二个多项式的输出结果为:7 1 10 -1 8 4 5 3 4 -3 3 -4 1 4 0,对应多项式:x^10-x^8+4x^5+3x^4-3x^3-4x+4.
输出说明
输出包含了两个多项式,分为两行给出(同行数据间以空格隔开):
第一行是多项式相加的结果,第二行是多项式相减的结果。每一行为两组数据:第一组为一个值,表示多项式的非零项数M;第二组为2*M个值,每相邻两个值表达一个多项式的非零系数项,分别为系数值、幂次值(其中各项按照幂次的降序排列)。但如果多项式没有非零系数项,则仅用0(M的值)表示,后面没有系数和幂次值出现。
不知道问题在哪里 运行结果总是不正确
#include <stdio.h>
#include <stdlib.h>
typedef struct PNode{
int coef;//系数
int exp;//指数
struct PNode *next;
}pnode;
pnode *Create(){
int coef;
int exp;
pnode *head,*s,*r;
head=NULL;
r=NULL;
int n;
scanf("%d",&n);
for(int i=1;i<=2*n;i++)
{
if(i%2==1){
scanf("%d",&coef);
s=(pnode*)malloc(sizeof(pnode));
s->coef=coef;
}
else if(i%2==0){
scanf("%d",&exp);
s=(pnode*)malloc(sizeof(pnode));
s->exp=exp;
}
if(head==NULL){
head=s;
}
else
r->next=s;
r=s;
}
if(r!=NULL) r->next=NULL;
return head;
}
pnode *add(pnode *pa,pnode *pb){
pnode *pc,*s,*r,*q;
int x;
pc=NULL;
r=NULL;
while(pa!=NULL && pb!=NULL){
if(pa->exp<pb->exp){
s=(pnode*)malloc(sizeof(pnode));
s->coef=pa->coef;
s->exp=pa->exp;
pa=pa->next;
}
else if(pa->exp<pb->exp){
s=(pnode*)malloc(sizeof(pnode));
s->coef=pb->coef;
s->exp=pb->exp;
pb=pb->next;
}
else{
x=pa->coef+pb->coef;
if(x!=0){
s=(pnode*)malloc(sizeof(pnode));
s->coef=x;
s->exp=pa->exp;
}
pa=pa->next;
pb=pb->next;
}
if(pc!=NULL)
pc=s;
else r->next=s;
r=s;
}
if(pb!=NULL){
q=pb;
}
else q=pa;
while(q==NULL){
s=(pnode*)malloc(sizeof(pnode));
s->coef=q->coef;
s->exp=q->exp;
r->next=s;
r=s;
q=q->next;
}
r->next==NULL;
return pc;
}
pnode *subtract(pnode *pa,pnode *pb){
pnode *pc,*p,*q;
pc=(pnode*)malloc(sizeof(pnode));
p=pc;
q=pb->next;
while(q){
p->next=(pnode*)malloc(sizeof(pnode));
p=p->next;
p->exp=-(q->exp);
p->coef=q->coef;
}
q=q->next;
p->next=NULL;
add(pc,pa);
return pc;
}
/*void count_n(pnode *head){
int n;
pnode *p;
p=head;
n++;
p=p->next;
while(p!=NULL){
n++;
p=p->next;
}
return n;
}*/
int PolynLength(pnode *p)
{
int i=0;
while(p!=NULL){
i++;
p=p->next;
}
return i;
}
int main(){
pnode *pa,*pb,*pc1,*pc2;
int n1,n2;
pa=Create();
pb=Create();
pc1=add(pa,pb);
pc2=subtract(pa,pb);
//n1=count_n(pc1);
n1=PolynLength(pc1)/2;
printf("%d",n1);
pnode *p1,*p2;
//p1=*pc1;
while(pc1!=NULL){
printf("%d %d",pc1->coef,pc1->exp);
pc1=pc1->next;
}
printf("\n");
n2=PolynLength(pc2)/2;
printf("%d",n2);
//p2=*pc2;
while(pc2!=NULL){
printf("%d %d",pc2->coef,pc2->exp);
pc2=pc2->next;
}
return 0;
}
for(int i=1;i<=2*n;i++)的处理中,为啥if...else各自都malloc分配内存啊?这肯定不对啊,if...else分别输入系数和指数,属于一个节点的内容,你各自产生一个,哪能行啊