高手请进《两个多项式相加》出了点问题,帮忙查错。。
#include <stdio.h>
#include <malloc.h>
struct num
{
int i;
int j;
struct num *next;
};
void main()
{
char a[20],b[20];
int sum(int y[],int k);
int c[6],s;
struct num *p1,*p2,*p3,s1,s2,s3,*q1,*q2,*q3,*g1,*g2,*g3,*s4;
p1=&s1;
p2=&s2;
p3=&s3;
p1-> next=NULL;
p2-> next=NULL;
p3-> next=NULL;
g1=p1;
g2=p2;
g3=p3;
gets(a);
gets(b);
int i=0,k=0,flag=0;
while(a[i]!= '\0 ')
{
if(a[i]> =48&&a[i] <=57)
{
c[k]=a[i]-48;
k++;
}
if((a[i] <48||a[i]> 57)&&k!=0)
{
if(flag%2==0)
{
p1-> j=sum(c,k);
k=0;
}
else
{
p1-> i=sum(c,k);
k=0;
q1=(struct num*)malloc(sizeof(struct num));
q1-> next=NULL;
p1-> next=q1;
p1=q1;
}
flag++;
}
i++;
}
flag=0;
i=0;
k=0;
while(b[i]!= '\0 ')
{
if(b[i]> =48&&b[i] <=57)
{
c[k]=b[i]-48;
k++;
}
if((b[i] <48||b[i]> 57)&&k!=0)
{
if(flag%2==0)
{
p2-> j=sum(c,k);
k=0;
}
else
{
p2-> i=sum(c,k);
k=0;
q2=(struct num*)malloc(sizeof(struct num));
q2-> next=NULL;
p2-> next=q2;
p2=q2;
}
flag++;
}
i++;
}
for(p1=g1;p1-> next!=NULL;p1=p1-> next)
{
s=p1-> i;
for(p2=g2;p2-> next!=NULL;p2=p2-> next)
{
if(p1-> i==p2-> i)
{
p3-> j=p1-> j+p2-> j;
p3-> i=p1-> i;
p1-> i=0;
q3=(struct num*)malloc(sizeof(struct num));
q3-> next=NULL;
p3-> next=q3;
p3=q3;
}
}
if(p1-> i==s)
{
p3-> j=p1-> j;
p3-> i=p1-> i;
q3=(struct num*)malloc(sizeof(struct num));
q3-> next=NULL;
p3-> next=q3;
p3=q3;
}
}
p3=g3;
while(p3-> next!=NULL)
{
printf( "%dx%d ",p3-> j,p3-> i);
p3=p3-> next;
}
}
int sum(int y[],int k)
{
int i,j,sum1=0;
for(i=0;i <k;i++)
for(j=i;j <k;j++)
{
y[i]=y[i]*10;
}
for(i=0;i <k;i++)
sum1=sum1+y[i]/10;
return (sum1);
}
做出来结果少了一项 不知道哪错了。。我编的是以aX^b这样固定的形式写的
希望高手帮我找出错误。。谢谢。。。。新手多多关照。。。
更希望高手提出更优的算法。。在此 不胜感激。。
[解决办法]
多项式相加不如使用valarray,简单方便。