问题 F: 案例3-1.4:一元多项式的乘法运算

题目描述

给你两个一元多项式,输出这两个一元多项式的乘积。

输入格式

输入包含两行,每行一个一元多项式。
每行开头一个数字n,表示该多项式非零项项数,后面有n组数字,每组数字包含两个数字,按顺序分别为该项的系数和指数。

输出格式

输出包含一行,按指数从大到小的顺序输出乘积的非0项的系数与指数,以空格分隔开。
如果最终结果为0,直接输出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

代码展示 

关键在于把两个一元多项式相乘分解为单项式乘多项式再相加

#include<iostream>
#include<cstdio>
using namespace std;
struct Node{
    int coef;
    int expon;
    Node *next;
};
typedef Node* List;
 
int InitList(List& list){
    list=new Node;
    list->next=NULL;
    return 0;
}
int DestroyList(List& list){
    List p1,p2;
    p1=list;
    p2=list;
    while(p1!=NULL){
        p1=p1->next;
        free(p2);
        p2=p1;
    }
    return 0;
}
int AddNode(List& list,int c,int e){
    List head=list;
    List p1=list;
    List p2=new Node;
    p2->coef=c;
    p2->expon=e;
    p2->next=NULL;
    if(head->next==NULL){
        head->next=p2;
    }
    else{
        while(p1->next!=NULL){
            p1=p1->next;
        }
        p1->next=p2;
    }
    return 0;
}
List MergeList(List &listA,List &listB){//排序
    List listC;
    InitList(listC);
    List p1=listA->next,p2=listB->next;
    List p3=listC;
    while(p1!=NULL&&p2!=NULL){
        if(p1->expon > p2->expon){
            List p=new Node;
            p->coef=p1->coef;
            p->expon=p1->expon;
            p->next=NULL;
            p3->next=p;
            p3=p3->next;
            p1=p1->next;
        }
        else if(p1->expon < p2->expon){
            List p=new Node;
            p->coef=p2->coef;
            p->expon=p2->expon;
            p->next=NULL;
            p3->next=p;
            p3=p3->next;
            p2=p2->next;
        }
        else{
            List p=new Node;
            p->coef=p1->coef+p2->coef;
            p->expon=p1->expon;
            p->next=NULL;
            p3->next=p;
            p3=p3->next;
            p1=p1->next;
            p2=p2->next;
        }
    }
    if(p1==NULL){
        for(;p2!=NULL;p2=p2->next){
            List p=new Node;
            p->coef=p2->coef;
            p->expon=p2->expon;
            p->next=NULL;
            p3->next=p;
            p3=p3->next;
        }
    }
    else if(p2==NULL){
        for(;p1!=NULL;p1=p1->next){
            List p=new Node;
            p->coef=p1->coef;
            p->expon=p1->expon;
            p->next=NULL;
            p3->next=p;
            p3=p3->next;
        }
    }
    return listC;
}
List SmallPolyMulti(List &list,int c,int e){
    List slist;
    InitList(slist);
    List p1=list->next;
 
     
    while(p1!=NULL){
        AddNode(slist,p1->coef*c,p1->expon+e);
        p1=p1->next;
    }
    return slist;
}
List PolyMulti(List &listA,List &listB){
    List p1=listA->next;
    List SumList;
    List sl;
    InitList(SumList);
    while(p1!=NULL){
        sl=SmallPolyMulti(listB,p1->coef,p1->expon);
        SumList=MergeList(SumList,sl);
        p1=p1->next;
    }
    return SumList;
}
void PrintList(const List& list){
    List p=list;
    int flag=0;
    while(p->next!=NULL){
        p=p->next;
        if(p->coef){
            cout<<p->coef<<' '<<p->expon<<' ';
            flag=1;
        }
        else continue;
    }
    if(!flag)  cout<<"0 0";
    cout<<endl;
}
 
int main(){
    int m;
    cin>>m;
    List listA,listB;
    InitList(listA);
    InitList(listB);
     
    int c,e;
    for(int i=0;i<m;i++){
        cin>>c>>e;
        AddNode(listA,c,e);
    }
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>c>>e;
        AddNode(listB,c,e);
    }//将两个一元多项式的系数与指数存入链表
 
    List SumList;
    InitList(SumList);
    SumList=PolyMulti(listA,listB);
    PrintList(SumList);
    DestroyList(listA);
    DestroyList(listB);
    return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值