02-线性结构1 一元多项式的乘法与加法运算

来源:互联网 发布:淘宝页头两侧图片 编辑:程序博客网 时间:2024/06/13 06:16

02-线性结构1 一元多项式的乘法与加法运算   (20分)

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

输入格式:

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

输出格式:

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

输入样例:

4 3 4 -5 2  6 1  -2 03 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 15 20 -4 4 -5 2 9 1 -2 0

 

#include <iostream>#include <stdio.h>#include <stdlib.h>#define N 1000using namespace std;///1307typedef struct node{    int xi;    int eop;    struct node * next;} Node;void display(Node *p){    Node *pt=NULL,*pr=NULL,*ps=NULL;    if (p->next==NULL)    {        printf("0 0\n");    }    else    {        for (pt=p->next; pt!=NULL; pt=pt->next)        {            printf("%d %d",pt->xi,pt->eop);            if (pt->next==NULL)            {                printf("\n");            }            else            {                printf(" ");            }        }    }}int main(){    int i,numA,numB,x,e;    Node *a=NULL,*b=NULL,*sum=NULL,*mul=NULL;    Node *pt=NULL,*pr=NULL,*ps=NULL;    Node *pa=NULL,*pb=NULL;    scanf("%d",&numA);    for (i=0; i<numA; i++)    {        scanf("%d %d",&x,&e);        if (x==0)        {            continue;        }        pt = (Node *)malloc(sizeof(Node));        pt->xi=x;        pt->eop=e;        pt->next=NULL;        if (a==NULL)        {            a=pt;            pr=pt;        }        else        {            pr->next=pt;            pr=pt;        }    }    if (a==NULL)    {        pt = (Node *)malloc(sizeof(Node));        pt->xi=0;        pt->eop=0;        pt->next=NULL;        a=pt;    }    scanf("%d",&numB);    for (i=0; i<numB; i++)    {        scanf("%d %d",&x,&e);        if (x==0)        {            continue;        }        pt = (Node *)malloc(sizeof(Node));        pt->xi=x;        pt->eop=e;        pt->next=NULL;        if (b==NULL)        {            b=pt;            pr=pt;        }        else        {            pr->next=pt;            pr=pt;        }    }    if (b==NULL)    {        pt = (Node *)malloc(sizeof(Node));        pt->xi=0;        pt->eop=0;        pt->next=NULL;        b=pt;    }    ///================    mul =(Node *)malloc(sizeof(Node));    mul->next=NULL;    for (pa=a; pa!=NULL; pa=pa->next)    {        // printf("11");        for (pb=b; pb!=NULL; pb=pb->next)        {            pt = (Node *)malloc(sizeof(Node));            pt->next=NULL;            pt->xi=pa->xi*pb->xi;            pt->eop=pa->eop+pb->eop;            if (mul->next==NULL)            {                mul->next=pt;                pr=mul;            }            else            {                for (ps=mul->next,pr=mul; ps!=NULL; ps=ps->next,pr=pr->next)                {                    if (pt->eop>ps->eop)                    {                        pt->next=ps;                        pr->next=pt;                        break;                    }                    else if (pt->eop==ps->eop)                    {                        ps->xi+=pt->xi;                        if (ps->xi==0)                        {                            pr->next=ps->next;                            free(ps);                        }                        else                        {                            free(pt);                        }                        break;                    }                }                if (ps==NULL)                {                    pr->next=pt;                }            }        }    }     for (pt=mul->next,pr=mul; pt!=NULL; pt=pt->next,pr=pr->next)     {         if (pt->xi==0)         {             pr->next=pt->next;             ps=pr->next;             free(ps);         }     }    display(mul);    ///=================================================    pt=a;    sum =(Node *)malloc(sizeof(Node));    sum->next=NULL;    for (pa=a,pb=b; pa!=NULL&&pb!=NULL;)    {        pt = (Node *)malloc(sizeof(Node));        pt->next =NULL;        if (pa->eop > pb->eop)        {            pt->eop =pa->eop;            pt->xi  =pa->xi;            pa      =pa->next;        }        else if (pa->eop < pb->eop)        {            pt->eop =pb->eop;            pt->xi  =pb->xi;            pb      =pb->next;        }        else        {            pt->eop =pa->eop;            pt->xi  =pa->xi+pb->xi;            pb      =pb->next;            pa      =pa->next;        }        if (sum->next==NULL)        {            sum->next=pt;            pr=sum->next;        }        else        {            pr=pr->next=pt;        }    }    if (pa!=NULL)    {        pr->next=pa;    }    else    {        pr->next=pb;    }    for (pt=sum->next,pr=sum; pt!=NULL; pt=pt->next,pr=pr->next)    {        if (pt->xi==0)        {            pr->next=pt->next;            ps=pr->next;            free(ps);        }    }    display(sum);//   cout << "Hello world!" << endl;    return 0;}


 

 

0 0
原创粉丝点击