• 一元多项式的乘法与加法运算


    设计函数分别求两个一元多项式的乘积与和。

    输入格式:

    输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

    输出格式:

    输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0

    输入样例:

    4 3 4 -5 2  6 1  -2 0
    3 5 20  -7 4  3 1

    输出样例:

    15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
    5 20 -4 4 -5 2 9 1 -2 0

    代码如下:

      1 #include <stdio.h>
      2 
      3 typedef struct PolyNode
      4 {
      5     int coef;
      6     int expon;
      7     struct PolyNode *link;
      8 }*Polynomial;
      9 
     10 void Attach(int a,int b,Polynomial *pRear)
     11 {
     12     Polynomial P;
     13     P=(Polynomial)malloc(sizeof(struct PolyNode));
     14     P->coef=a;
     15     P->expon=b;
     16     P->link=NULL;
     17     (*pRear)->link=P;
     18     *pRear=P;
     19 }
     20 
     21 Polynomial ReadPoly()
     22 {
     23     Polynomial P,Rear,t;
     24     int n,a,b;
     25     scanf("%d",&n);
     26     P=(Polynomial)malloc(sizeof(struct PolyNode));
     27     P->link=NULL;
     28     Rear=P;
     29     while(n--)
     30     {
     31         scanf("%d %d",&a,&b);
     32         Attach(a,b,&Rear);
     33     }
     34     t=P;
     35     P=P->link;
     36     free(t);
     37     return P;
     38 }
     39 
     40 Polynomial Add(Polynomial P1,Polynomial P2)
     41 {
     42     Polynomial front,rear,temp;
     43     int sum;
     44     rear=(Polynomial)malloc(sizeof(struct PolyNode));
     45     front=rear;
     46     while(P1&&P2)
     47     {
     48         if(P1->expon>P2->expon)
     49         {
     50             Attach(P1->coef,P1->expon,&rear);
     51             P1=P1->link;
     52         }
     53         if(P1->expon<P2->expon)
     54         {
     55             Attach(P2->coef,P2->expon,&rear);
     56             P2=P2->link;
     57         }
     58         if(P1->expon==P2->expon)
     59         {
     60             sum=P1->coef+P2->coef;
     61             if(sum)
     62             {
     63                 Attach(sum,P1->expon,&rear);
     64             }
     65             P1=P1->link;
     66             P2=P2->link;
     67         }
     68     }
     69     for(;P1;P1=P1->link) Attach(P1->coef,P1->expon,&rear);
     70     for(;P2;P2=P2->link) Attach(P2->coef,P2->expon,&rear);
     71     rear->link=NULL;
     72     temp=front;
     73     front=front->link;
     74     free(temp);
     75     return front; 
     76 }
     77 
     78 Polynomial Mult(Polynomial P1,Polynomial P2)
     79 {
     80     Polynomial P,Rear,t1,t2,t;
     81     int a,b;
     82     if(!P1||!P2) return NULL;
     83     t1=P1;
     84     t2=P2;
     85     P=(Polynomial)malloc(sizeof(struct PolyNode));
     86     P->link=NULL;
     87     Rear=P;
     88     while(t2)
     89     {
     90         Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear);
     91         t2=t2->link;
     92     }
     93     t1=t1->link;
     94     while(t1)
     95     {
     96         t2=P2;
     97         Rear=P;
     98         while(t2)
     99         {
    100             a=t1->coef*t2->coef;
    101             b=t1->expon+t2->expon;
    102             while(Rear->link&&Rear->link->expon>b)
    103             {
    104                 Rear=Rear->link;
    105             }
    106             if(Rear->link&&Rear->link->expon==b)
    107             {
    108                 if(Rear->link->coef+a)
    109                     Rear->link->coef+=a;
    110                 else
    111                 {
    112                     t=Rear->link;
    113                     Rear->link=t->link;
    114                     free(t);
    115                 }
    116             }
    117             else
    118             {
    119                 t=(Polynomial)malloc(sizeof(struct PolyNode));
    120                 t->coef=a;
    121                 t->expon=b;
    122                 t->link=Rear->link;
    123                 Rear->link=t;
    124                 Rear=Rear->link;
    125             }
    126             t2=t2->link;
    127         }
    128         t1=t1->link;
    129     }
    130     t2=P;
    131     P=P->link;
    132     free(t2);
    133     return P;
    134 }
    135 
    136 void PrintPoly(Polynomial P)
    137 {
    138     int flag=0;
    139     if(!P)
    140     {
    141         printf("0 0
    ");
    142         return ;
    143     }
    144     while(P)
    145     {
    146         if(!flag) flag=1;
    147         else printf(" ");
    148         printf("%d %d",P->coef,P->expon);
    149         P=P->link;
    150     }
    151     printf("
    ");
    152 }
    153 
    154 int main()
    155 {
    156     Polynomial P1,P2,PP,PS;
    157     
    158     P1=ReadPoly();
    159     P2=ReadPoly();
    160     PP=Mult(P1,P2);
    161     PrintPoly(PP);
    162     PS=Add(P1,P2);
    163     PrintPoly(PS);
    164      
    165     return 0;
    166 }
  • 相关阅读:
    C/C++的区别
    stm32之UCOS-III
    PID控制及整定算法
    PCB设计基础及技巧
    电路的一些基本理论
    stm32与三菱PLC通信
    stm32之外设控制
    stm32之内部功能
    JavaScript数组方法详解
    git新建关联克隆仓库指令
  • 原文地址:https://www.cnblogs.com/jiamian/p/10625002.html
Copyright © 2020-2023  润新知