主题:这是为啥?求解答
这是我写的: (多项式加法)编写一个程序实现两个多项式的加法运算,例如求2X^20-X^17+5X^9-7X^7+16X^5+10X^4+22X^2-15和2x^19+3x^17+15x^10+7x^7-10x^5+4x^4+13x^2-7,要求使用动态变量
不知为什么输入两个8项式时结果总多出一项东西
输入两个2项式却没问题。
代码有点长:先输入两个多项式->合并同类项-->按项系数的大小排序-》输出
#include <stdio.h>
#include <stdlib.h>
typedef struct{int a;int b;}ab;
main()
{
int i,j,k=0,l=0,m,n,tem,tem2;
ab*p,*r;
printf("请分别输入你要计算的多项式的项数\n");
scanf("%d%d",&m,&n);
p=(ab*)malloc((m+n)*sizeof(ab));
printf("请输入第一个多项式:\n");
for(i=0;i<m;i++)
scanf("%dx^%d",&p[i].a,&p[i].b);
printf("请输入第二个多项式:\n");
for(i=m;i<m+n;i++)
scanf("%dx^%d",&p[i].a,&p[i].b);
for(i=0;i<m+n-1;i++)
for(j=i+1;j<m+n;j++)
{
if(p[i].b==p[j].b&&p[i].a!=0&&p[j].a!=0)
{p[i].a+=p[j].a;p[j].a=0;l++;}
}
r=(ab*)malloc((m+n-l)*sizeof(ab));
k=0;
for(i=0;i<m+n;i++)
{
if(p[i].a!=0){r[k].a=p[i].a;r[k].b=p[i].b;k++;}
}
free(p);p=NULL;
for(i=0;i<m+n-l-1;i++)
for(j=i+1;j<m+n-l;j++)
{
if(r[i].b<r[j].b){tem=r[i].a;r[i].a=r[j].a;r[j].a=tem;
tem2=r[i].b;r[i].b=r[j].b;r[j].b=tem2;}
}
printf("结果如下:\n");
if(r[0].a==-1)printf("-x^%d",r[0].b);
else if(r[0].a==1)printf("x^%d",r[0].b);
else if(r[0].a!=-1&&r[0].a!=1) printf("%dx^%d",r[0].a,r[0].b);
for(i=1;i<m+n-l;i++)
{
if(r[i].a>0&&r[i].a!=1&&r[i].b!=0) printf("+%dx^%d",r[i].a,r[i].b);
else if(r[i].a>0&&r[i].a!=1&&r[i].b==0) printf("+%d",r[i].a);
else if(r[i].a==1&&r[i].b!=0)printf("+x^%d",r[i].b);
else if(r[i].a==1&&r[i].b==0)printf("+1");
else if(r[i].a<0&&r[i].a!=-1&&r[i].b!=0) printf("%dx^%d",r[i].a,r[i].b);
else if(r[i].a<0&&r[i].a!=-1&&r[i].b==0) printf("%d",r[i].a);
else if(r[i].a==-1&&r[i].b!=0)printf("-x^%d",r[i].b);
else if(r[i].a==-1&&r[i].b==0)printf("-1");
}
free(r);r=NULL;
printf("\n");
system("pause");
return 0;
}
不知为什么输入两个8项式时结果总多出一项东西
输入两个2项式却没问题。
代码有点长:先输入两个多项式->合并同类项-->按项系数的大小排序-》输出
#include <stdio.h>
#include <stdlib.h>
typedef struct{int a;int b;}ab;
main()
{
int i,j,k=0,l=0,m,n,tem,tem2;
ab*p,*r;
printf("请分别输入你要计算的多项式的项数\n");
scanf("%d%d",&m,&n);
p=(ab*)malloc((m+n)*sizeof(ab));
printf("请输入第一个多项式:\n");
for(i=0;i<m;i++)
scanf("%dx^%d",&p[i].a,&p[i].b);
printf("请输入第二个多项式:\n");
for(i=m;i<m+n;i++)
scanf("%dx^%d",&p[i].a,&p[i].b);
for(i=0;i<m+n-1;i++)
for(j=i+1;j<m+n;j++)
{
if(p[i].b==p[j].b&&p[i].a!=0&&p[j].a!=0)
{p[i].a+=p[j].a;p[j].a=0;l++;}
}
r=(ab*)malloc((m+n-l)*sizeof(ab));
k=0;
for(i=0;i<m+n;i++)
{
if(p[i].a!=0){r[k].a=p[i].a;r[k].b=p[i].b;k++;}
}
free(p);p=NULL;
for(i=0;i<m+n-l-1;i++)
for(j=i+1;j<m+n-l;j++)
{
if(r[i].b<r[j].b){tem=r[i].a;r[i].a=r[j].a;r[j].a=tem;
tem2=r[i].b;r[i].b=r[j].b;r[j].b=tem2;}
}
printf("结果如下:\n");
if(r[0].a==-1)printf("-x^%d",r[0].b);
else if(r[0].a==1)printf("x^%d",r[0].b);
else if(r[0].a!=-1&&r[0].a!=1) printf("%dx^%d",r[0].a,r[0].b);
for(i=1;i<m+n-l;i++)
{
if(r[i].a>0&&r[i].a!=1&&r[i].b!=0) printf("+%dx^%d",r[i].a,r[i].b);
else if(r[i].a>0&&r[i].a!=1&&r[i].b==0) printf("+%d",r[i].a);
else if(r[i].a==1&&r[i].b!=0)printf("+x^%d",r[i].b);
else if(r[i].a==1&&r[i].b==0)printf("+1");
else if(r[i].a<0&&r[i].a!=-1&&r[i].b!=0) printf("%dx^%d",r[i].a,r[i].b);
else if(r[i].a<0&&r[i].a!=-1&&r[i].b==0) printf("%d",r[i].a);
else if(r[i].a==-1&&r[i].b!=0)printf("-x^%d",r[i].b);
else if(r[i].a==-1&&r[i].b==0)printf("-1");
}
free(r);r=NULL;
printf("\n");
system("pause");
return 0;
}