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


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

    输入格式:

    输入分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;
    
    
    
    }
  • 相关阅读:
    weka使用笔记1cluster内方法的使用
    RCP导出的错误解决
    hadoop 无法启动tasktrack 和jobtrack 解决办法
    前段技术
    数字信号处理 - chap1 采样
    数字信号处理 - chap5 数字信号频谱
    数字信号处理-chap3 滤波、差分方程、卷积
    数字信号处理 - Chap7 DFT和FFT (1)DFT基础
    数字信号处理 - chap2 数字信号
    数字信号处理 - Chap8 小波 (1)基础
  • 原文地址:https://www.cnblogs.com/xuyibao/p/7610620.html
Copyright © 2020-2023  润新知