数据结构 8.一元多项式相乘

数据结构 8.一元多项式相乘

  • 问题描述
    • 输入
    • 输出
    • 预设代码
  • 样例
    • 输入(1)
    • 输出(1)
    • 输入(2)
    • 输出(2)
    • 输入(3)
    • 输出(3)
    • 输入(4)
    • 输出(4)
    • 输入(5)
    • 输出(5)
  • 代码

问题描述

要求采用链表形式,求两个一元多项式的乘积:h3 = h1*h2。函数原型为:void multiplication( NODE * h1, NODE * h2, NODE * h3 )。

输入

输入数据为两行,分别表示两个一元多项式。每个一元多项式以指数递增的顺序输入多项式各项的系数(整数)、指数(整数)。

例如: 1 + 2 x + x 2 1+2x+x^2 1+2x+x2表示为:<1,0>,<2,1>,<1,2>,

输出

以指数递增的顺序输出乘积: <系数,指数>,<系数,指数>,<系数,指数>,

零多项式的输出格式为:<0,0>,

预设代码

/* PRESET CODE BEGIN - NEVER TOUCH CODE BELOW */  #include   
#include   typedef struct node  
{   int    coef, exp;  struct node  *next;  
} NODE;  void multiplication( NODE *, NODE * , NODE * );  
void input( NODE * );  
void output( NODE * );  void input( NODE * head )  
{   int flag, sign, sum, x;  char c;  NODE * p = head;  while ( (c=getchar()) !='\n' )  {  if ( c == '<' )  {    sum = 0;  sign = 1;  flag = 1;  }  else if ( c =='-' )  sign = -1;  else if( c >='0'&& c <='9' )  {    sum = sum*10 + c - '0';  }  else if ( c == ',' )  {    if ( flag == 1 )  {    x = sign * sum;  sum = 0;  flag = 2;  sign = 1;  }  }  else if ( c == '>' )  {    p->next = ( NODE * ) malloc( sizeof(NODE) );  p->next->coef = x;  p->next->exp  = sign * sum;  p = p->next;  p->next = NULL;  flag = 0;  }  }  
}  void output( NODE * head )  
{  while ( head->next != NULL )  {   head = head->next;  printf("<%d,%d>,", head->coef, head->exp );  }  printf("\n");  
}  int main()  
{   NODE * head1, * head2, * head3;  head1 = ( NODE * ) malloc( sizeof(NODE) );  input( head1 );  head2 = ( NODE * ) malloc( sizeof(NODE) );  input( head2 );  head3 = ( NODE * ) malloc( sizeof(NODE) );  head3->next = NULL;  multiplication( head1, head2, head3 );  output( head3 );  return 0;  
}  /* PRESET CODE END - NEVER TOUCH CODE ABOVE */

样例

输入(1)

<1,0>,<2,1>,<1,2>,
<1,0>,<1,1>,

输出(1)

<1,0>,<3,1>,<3,2>,<1,3>,

输入(2)

<0,0>,
<1,20>,<-8,40>,

输出(2)

<0,0>,

输入(3)

<1,20>,<-8,40>,
<0,0>,

输出(3)

<0,0>,

输入(4)

<-1,0>,<1,1>,
<1,0>,<1,1>,

输出(4)

<-1,0>,<1,2>,

输入(5)

<5,0>,<10,1>,
<2,0>,<3,1>,<4,2>,<5,3>,

输出(5)

<10,0>,<35,1>,<50,2>,<65,3>,<50,4>,

代码

void multiplication(NODE *head1, NODE *head2, NODE *head3)    
{    NODE *p1, *p2, *p3,*p3_pre, *pnew, *start;    int flag = 0;  p1=head1->next;    while(p1)    {    p2=head2->next;    int c1;    c1=p1->coef;    if(c1==0)    {    p1=p1->next;    continue;    }    start=head3;    while(p2)    {    flag=0;    pnew=(NODE *)malloc(sizeof(NODE));    int c,e;    c=p2->coef*p1->coef;    e=p2->exp+p1->exp;    pnew->coef=c;    pnew->exp=e;    int c2;    c2=p2->coef;    if(c2==0)    {    p2 = p2->next;    continue;    }    p3=start->next;    p3_pre=start;    while((p3)&&(p3->exp<e))    {    p3=p3->next;    p3_pre=p3_pre->next;    }    if(!p3)    {    p3_pre->next=pnew;    pnew->next=NULL;    start=p3_pre;    }    else if(p3->exp==e)    {    p3->coef=c+p3->coef;;    start=p3_pre;    }    else if(p3->exp>e)    {    p3_pre->next=pnew;    pnew->next=p3;    start=p3_pre;    }    p2=p2->next;    }    p1=p1->next;    }    if(head3->next==NULL)    {    printf("<0,0>,");    }    NODE *tmp;    p3=head3;    while(p3)     {       if(p3->coef==0&&p3->exp!=0)    {     p3=tmp;     p3->next=p3->next->next;      p3=p3->next;     }     else    {       tmp=p3;     p3=p3->next;     }     }     
}  


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部