7-1 一元多项式的乘法与加法运算

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

输入格式:

输入分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







#include<iostream>
#include<algorithm>
using namespace std;
int k;
int n1,n2;
typedef struct Node
{
    int data1;
    int data2;
    struct Node *next;


} Node,*LinkNode;

void L_Print(LinkNode L)
{
    LinkNode p=L->next;
    int j=0;
    while(p)
    {
        if(p->data2!=-10000&&p->data1!=0)
        {
            if(j==0)
            {

                cout<<p->data1<<" "<<p->data2;
                j=1;
                p=p->next;
            }
            else
            {
                cout<<" "<<p->data1<<" "<<p->data2;

                p=p->next;
            }


        }
        else
            p=p->next;


    }
    if(j==0)
    {
        cout<<"0 0";
    }
}
void L_Sort(LinkNode &L1)
{
    LinkNode p1=L1,p2=L1,t;

    for( p1=L1->next; p1!=NULL; p1=p1->next)
    {
        for(p2=p1->next; p2!=NULL; p2=p2->next)
        {
            if(p1->data2<p2->data2)
            {
                t=new Node;
                t->data1=p1->data1;
                t->data2=p1->data2;
                p1->data1=p2->data1;
                p1->data2=p2->data2;
                p2->data1=t->data1;
                p2->data2=t->data2;
            }
            else if(p1->data2==p2->data2)
            {
                p1->data1=p1->data1+p2->data1;
                p2->data2=-10000;

            }
        }

    }


}

void L_Insert(LinkNode &L,int n)
{

    LinkNode q=L,p;
    for(int i=0; i<n; i++)
    {
        p=new Node;
        cin>>p->data1>>p->data2;
        p->next=q->next;
        q->next=p;
        q=p;
        // cout<<" ######"<<q->data1<<" "<<q->data2;

    }


}
void L_Add(LinkNode &L1,LinkNode &L2)
{
    LinkNode p1=L1->next,p2=L2->next,p3=L1,r;
    int sum;
    while(p1&&p2)
    {
        if(p1->data2==p2->data2)
        {
            sum=p1->data1+p2->data1;
            if(sum!=0)
            {
                p1->data1=sum;
                p3->next=p1;
                p3=p1;
                p1=p1->next;
                p2=p2->next;
            }
            else
            {
                p1=p1->next;
                p2=p2->next;
            }
        }
        else if(p1->data2>p2->data2)
        {
            p3->next=p1;
            p3=p1;
            p1=p1->next;
        }
        else
        {

            p3->next=p2;
            p3=p2;
            p2=p2->next;

        }
    }
    p3->next=p1?p1:p2;

}
void L_Multiply(LinkNode L1,LinkNode L2,LinkNode &L)
{
    LinkNode p1=L1->next,p2,p3,q=L;
    while(p1)
    {
        p2=L2->next;
        while(p2)
        {
            p3=new Node;
            p3->data1=(p1->data1)*(p2->data1);
            p3->data2=(p1->data2)+(p2->data2);
            p3->next=q->next;
            q->next=p3;
            q=p3;
            p2=p2->next;
        }
        p1=p1->next;

    }
    //  L_Print(L);
}

int main()
{

    LinkNode L1,L2,L3,L4;
    L1=new Node;
    //L1->next=NULL;
    L2=new Node;
    //L2->next=NULL;
    L3=new Node;
    L3->next=NULL;
    L4=new Node;
    L4->next=NULL;
    cin>>n1;
    k=n1;
    L_Insert(L1,n1);
    cin>>n2;
    k+=n2;
    L_Insert(L2,n2);
    L_Multiply(L1,L2,L3);
    L_Sort(L3);
    L_Print(L3);
    cout<<endl;
    L_Add(L1,L2);
    L_Print(L1);
    return 0;



}

 

posted on 2017-09-29 13:19  徐义宝  阅读(1024)  评论(0编辑  收藏  举报

导航