您的位置:首页 > 其它

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

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: