您的位置:首页 > 其它

一元稀疏多项式相加

2016-10-07 10:49 309 查看
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct
{
int ceof;
int expn;
}Poly;
typedef struct Polynode
{
Poly data;
struct Polynode *next;
}Polynode,*Polylink;
void Addpoly(Poly *A,int n,Poly *B,int m,Polylink& C)
{
int i=0,j=0;
Polylink p,pc;
C=pc=(Polylink)malloc(sizeof(Poly));
while(i<n&&j<m)
{
if(A[i].expn<B[j].expn)
{
p=(Polylink)malloc(sizeof(Polylink));
p->data.ceof=A[i].ceof;
p->data.expn=A[i].expn;
pc->next=p;
pc=p;
i++;
}
else if(A[i].expn>B[j].expn)//else
{
p=(Polylink)malloc(sizeof(Polylink));
p->data.ceof=B[j].ceof;
p->data.expn=B[j].expn;
pc->next=p;
pc=p;
j++;
}
else
{
if(A[i].ceof+B[j].ceof!=0.0)
{
p=(Polylink)malloc(sizeof(Polylink));
p->data.ceof=A[i].ceof+B[j].ceof;
p->data.expn=A[i].expn;
pc->next=p;
pc=p;
}
i++;
j++;
}
}
while(i<n)
{
p=(Polylink)malloc(sizeof(Polylink));
p->data.ceof=A[i].ceof;
p->data.expn=A[i].expn;
pc->next=p;
pc=p;
i++;
}
while(j<m)
{
p=(Polylink)malloc(sizeof(Polylink));
p->data.ceof=B[j].ceof;
p->data.expn=B[j].expn;
pc->next=p;
pc=p;
j++;
}
pc->next=NULL;//
}
void print(Polylink C)
{
Polylink p;
p=C->next;
if(p==NULL)
{
printf("0");
return;
}
while(p)
{
if(p->data.ceof>1||p->data.ceof<-1)
printf("%d",p->data.ceof);
if(p->data.expn==0&&(p->data.ceof==1||p->data.ceof==-1))
printf("%d",p->data.ceof);
else if(p->data.expn!=0&&p->data.ceof==-1)
printf("-");
if(p->data.expn==1)
printf("x");
else if(p->data.expn>1)
printf("x^%d",p->data.expn);
if(p->next&&(p->next->data.ceof>0))
printf("+");
p=p->next;
}
}
int main()
{
int n,m;
printf("\t\t\t\t\t   **********************\n");
printf("\t\t\t\t\t   * 一元稀疏多项式相加 *\n");
printf("\t\t\t\t\t   **********************\n");
printf("请输入相加项数:输入0 0则结束运算\n");
while(scanf("%d%d",&n,&m),n,m)
{
Poly *A,*B;
A=(Poly*)malloc(n*sizeof(Poly));
B=(Poly*)malloc(m*sizeof(Poly));
Polylink C,pc;
printf("请输入A各项系数和指数:\n");
for(int i=0;i<n;i++)
scanf("%d%d",&A[i].ceof,&A[i].expn);
printf("请输入B各项系数和指数:\n");
for(int i=0;i<m;i++)
scanf("%d%d",&B[i].ceof,&B[i].expn);
Addpoly(A,n,B,m,C);
print(C);
free(A);
free(B);
pc=C;
while(C)
{
C=C->next;
free(pc);
pc=C;
}
printf("\n\n请输入相加项数:输入0 0则结束运算\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: