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

Posted 徐义宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;



}

 

以上是关于7-1 一元多项式的乘法与加法运算的主要内容,如果未能解决你的问题,请参考以下文章

[PAT] 一元多项式的乘法与加法运算 C语言实现

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

7-22 一元多项式的乘法与加法运算 (20 分)

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

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

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