[学习]请教:一元稀疏多项式加、减、乘运算的C++语言实现

[复制链接]
查看11 | 回复2 | 2021-1-8 03:51:15 | 显示全部楼层 |阅读模式
A.基本功能要求:
  1.输入并建立多项式。
  2.输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。
  3.用单链表存储多项式。
  B.要求完成的功能:
  多项式a和b相加,建立多项式a+b,输出相加后的多项式。
  多项式a和b相减,建立多项式a-b,输出相减后的多项式。
  多项式a和b相×,建立多项式a×b,输出相乘后的多项式。

回复

使用道具 举报

千问 | 2021-1-8 03:51:15 | 显示全部楼层
有会的请帮个忙
  小弟在这先谢过了:)

回复

使用道具 举报

千问 | 2021-1-8 03:51:15 | 显示全部楼层
太晚了没时间写
  随便找了个机子里面相关的,参考下就可以写了
  不懂可以提问
  
  这个是2个多项目式相乘,多项式按指数降序排列,*pPolyNode为链表指针
  
  #include
  #include
  #include
  typedefstruct term{
   double coef;
   int expn;
  
struct term* next;
  }PolyNode ,*pPolyNode;
  pPolyNode CreatePoly()
  {
   PolyNode *p,*q,*s,*head=NULL;
   double coef;
   int expn;
  
   head=(pPolyNode)malloc( sizeof(PolyNode) );
   if(head==NULL)
   {
  return NULL;
   }
   head->coef =0.0;
   head->expn =0;
   head->next =NULL;
   scanf(“%lf“,&coef);
   scanf(“%d“,&expn);
  
  
   while( (long)coef !=0 && expn !=0 )
   {
  s = (pPolyNode)malloc(sizeof(PolyNode));
  s->coef = coef;
  s->expn = expn;
  
  q=head->next ;
  p=head;
  while(q && expn expn)
  {
   p=q;
   q=q->next;
  }
  
  if(q== NULL || expn > q->expn )
  {
   p->next =s;
   s->next =q;
  }
  else
  {
   q->coef+=coef;
  }
  scanf(“%lf“,&coef);
  scanf(“%d“,&expn);
   }
   return head;
  
  }
  
  pPolyNodeReverse(pPolyNode head)
  {
   PolyNode *p,*q,*t;
   p=NULL;
   q=head->next;
   while( q!=NULL )
   {
  t=q->next;
  q->next =p;
  p=q;
  q=t;
   }
   head->next =p;
   return head;
  }
  pPolyNode multiply(pPolyNode A,pPolyNode B)
  {
   PolyNode *pa,*pb,*pc,*u,*head;
   int k ,maxExp;
   double coef;
   head=(pPolyNode)malloc( sizeof (PolyNode) );
   if(head==NULL)
   {
  printf(“Allocable memory fail!\n“);
  return NULL;
   }
  
   head->coef=0.0;
   head->expn =0;
   head->next =NULL;
  
   if(A->next !=NULL && B->next != NULL)
   {
  maxExp=(A->next) ->expn +(B->next )->expn ;
   }
   else
   {
  return head;
   }
   pc=head;
   B=Reverse (B);
  
   for(k=maxExp; k>=0; k--)
   {
  pa = A->next ;
  while(pa != NULL && pa->expn >k)
   pa=pa->next ;
  
  pb = B->next ;
  while( pb != NULL && pa != NULL && (pa->expn + pb->expn) next;
  
  coef=0.0;
  while(pa != NULL && pb != NULL )
  {
   if( (pa->expn +pb->expn )==k )
   {
  
coef+=pa->coef * pb->coef;
  
pa=pa->next;
  
pb=pb->next;
   }
   else
   {
  
if(( pa->expn+pb->expn ) > k )
  
{
  
pa=pa->next;
  
}
  
else
  
{
  
pb=pb->next;
  
}
   }
  }
  if( coef != 0.0 )
  {
   u=(pPolyNode)malloc(sizeof(PolyNode));
   u->coef =coef;
   u->expn =k;
   u->next =pc->next;
   pc->next=u;
   pc=u;
  }
   }
   B=Reverse(B);
   return head;
  
  }
  
  //print Poly
  
  void Printpoly(pPolyNode head)
  {
   PolyNode *p=head->next;
  
   while(p)
   {
  printf(“%1.1f“,p->coef);
  if(p->expn )
   printf(“*x^%d“,p->expn );
  if(p->next && p->next->coef >0)
   printf(“+“);
  p=p->next;
   }
  }
  
  int main()
  {
   pPolyNode A,B,C;
   A=CreatePoly();
   printf(“A(x)=“);
   Printpoly (A);
   printf(“\n“);
  
   B=CreatePoly();
   printf(“B(x)=“);
   Printpoly (B);
   printf(“\n“);
  
   C=multiply(A,B);
  
   //C=CreatePoly();
   printf(“C(x)=“);
   Printpoly (C);
   printf(“\n“);
  
   //getch();
  
   return 0;
  }
  
  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行