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

来源:互联网 发布:wap页面纯文字游戏源码 编辑:程序博客网 时间:2024/05/16 19:46

刚看到这道题时,想到了链表,也想到了数组存储。但是数组存储有一个问题:当要对表达式进行+和*操作时,需要找出非零元素,比较麻烦。这个代码也是看别人的自己才写出来,代码:

#include <bits/stdc++.h>using namespace std;struct Node{    int co;           //系数    int ex;       //指数} node[1001];int main(){    ios::sync_with_stdio(false);    int add[1003];             //存放相加的结果    int mul[2005];                //存放相乘的结果    memset(add,0,sizeof(add));      //清零操作    memset(mul,0,sizeof(mul));    int n,m;    cin>>n;    for(int i=0; i<n; i++)    {        cin>>node[i].co>>node[i].ex;  //先输入系数再输入指数        add[node[i].ex]=node[i].co;   //把指数作为数组的下标,系数作为数组的值    }    cin>>m;    int a,b;    for(int i=0; i<m; i++)    {        cin>>a>>b;                    //先输入系数,再输入指数        add[b]=a+add[b];   //通过指数作为数组下标,进行相加。        for(int j=0; j<n; j++)        {            //因为是按照指数的递降顺序进行输入  指数相加,系数相乘            mul[b+node[j].ex] += a*node[j].co;        }    }    //开始进行循环输出    int isfirst,HaveNull=0;   //isfirst判断是不是第一个输出    isfirst=1;    for(int i=2001; i>=0; i--)    {        if(mul[i]!=0)   //如果数组值不是零,即:系数不为零        {            if(isfirst==1)            {                cout<<mul[i]<<" "<<i;   //输出格式要求                isfirst=0;            }            else                cout<<" "<<mul[i]<<" "<<i;            HaveNull=1;        }    }    if(HaveNull==0)        cout<<"0 0";    cout<<endl;    isfirst=1;    HaveNull=0;    for(int i=1001; i>=0; i--)    {        if(add[i]!=0)        {            if(isfirst==1)            {                cout<<add[i]<<" "<<i;                isfirst=0;            }            else                cout<<" "<<add[i]<<" "<<i;            HaveNull=1;        }    }        if(HaveNull==0)        cout<<"0 0";    cout<<endl;    return 0;}


阅读全文
0 0