1009. Product of Polynomials (25)

来源:互联网 发布:中国铁塔 网络强国 编辑:程序博客网 时间:2024/04/27 00:02

1009. Product of Polynomials (25)

 

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

This time, you are supposed to find A*B where A and B are two polynomials.

Input Specification:

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10, 0 <= NK < ... < N2 < N1 <=1000.

Output Specification:

For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.

Sample Input
2 1 2.4 0 3.22 2 1.5 1 0.5
Sample Output
3 3 3.6 2 6.0 1 1.6

在多项式加法的基础上增加了MulP函数。

 

#include <stdio.h>  #include <stdlib.h>    typedef struct node  {      int exp;      double coef;      struct node *next;  }NODE;    NODE* GetP(void)  {      int k,i,expp;      double coeff;      NODE *head;      NODE *p,*t;      head = (NODE*)malloc(sizeof(NODE));      head ->next = NULL;      p = head;      scanf("%d",&k);      for(i=0;i<k;i++)      {          scanf("%d %lf",&expp,&coeff);          t = (NODE*)malloc(sizeof(NODE));          t->exp = expp;          t->coef = coeff;          t->next = NULL;          p->next = t;          p = t;      }      return head;  }    NODE* AddP(NODE *Pa,NODE *Pb)  {      NODE *head;      NODE *p,*t;  NODE *PA = Pa,*PB =Pb;    head = (NODE*)malloc(sizeof(NODE));      head->next = NULL;      p = head;      PA = PA->next;      PB = PB->next;      while(PA!=NULL && PB!= NULL)      {          if(PA->exp == PB->exp)          {              if(PA->coef + PB->coef!=0)              {                  t = (NODE*)malloc(sizeof(NODE));                  t->exp = PA->exp;                  t->coef = PA->coef + PB->coef;                  t->next = NULL;                  p->next = t;                  p = t;              }              PA = PA->next;              PB = PB->next;          }          else if(PA->exp > PB->exp)          {              t = (NODE*)malloc(sizeof(NODE));              t->exp = PA->exp;              t->coef = PA->coef;              t->next = NULL;              PA = PA->next;              p->next = t;              p = t;          }          else          {              t = (NODE*)malloc(sizeof(NODE));              t->exp = PB->exp;              t->coef = PB->coef;              t->next = NULL;              PB = PB->next;              p->next = t;              p = t;          }        }      while(PA != NULL)      {          t = (NODE*)malloc(sizeof(NODE));          t->exp = PA->exp;          t->coef = PA->coef;          t->next = NULL;          PA = PA->next;          p->next = t;          p = t;      }      while(PB != NULL)      {          t = (NODE*)malloc(sizeof(NODE));          t->exp = PB->exp;          t->coef = PB->coef;          t->next = NULL;          PB = PB->next;          p->next = t;          p = t;      }      return head;  }   NODE* MulP(NODE *PA,NODE *PB){NODE *RetP;NODE *head,*p,*t,*m;RetP = (NODE*)malloc(sizeof(NODE));RetP->next = NULL;head = (NODE*)malloc(sizeof(NODE));head->next = NULL;p = head;PA = PA->next;PB = PB->next;while(PA != NULL){m = PB;while(m != NULL){t = (NODE*)malloc(sizeof(NODE));t->next = NULL;t->exp = PA->exp + m->exp;t->coef = PA->coef * m->coef;p->next = t;p = t;m = m->next;}RetP = AddP(head,RetP);PA = PA->next;head = (NODE*)malloc(sizeof(NODE));head->next = NULL;p = head;}return RetP;}int main()  {      NODE *PA,*PB,*PC,*p;      int k;      PA = GetP();      PB = GetP();      PC = MulP(PA,PB);      if(PC->next == NULL)      {          printf("0");          return 0;      }      PC = PC->next;      for(k=0,p=PC;p!=NULL;k++,p=p->next);      printf("%d ",k);      while(PC->next!=NULL)      {          printf("%d %.1lf ",PC->exp,PC->coef);          PC = PC->next;      }      printf("%d %.1lf",PC->exp,PC->coef);      return 0;  }  


 

 

 

 

 

 

0 0
原创粉丝点击