一、前言
本文学自王卓老师的视频
二、内容
2.1关于稀疏多项式
稀疏多项式:一些的项不会出现,如7+3x+x^8
struct t{
int p;//系数
int e;//指数
};
图一
2.2相加步骤
1.创建一个新数组c
2.分别从头遍历比较a和b的每一项
(1)指数相同,对应系数相加若其和不为零,则在c中增加一个新项
指数不相同,则将指数较小的项复制到c中
3.一个多项式已遍历完毕时,将另一个剩余项依次复制到c中即可
三、代码实现
#include <iostream>
using namespace std;
#define N 30
struct t {
int p;//系数
int e;//指数
};
int main()
{
struct t a[N], b[N],c[2*N];
int n,m;
for (int i = 0; i < 2 * N; i++)
{
c[i].e = 0;
c[i].p = 0;
}
cout << "请输入多项式A项的个数" << endl;
cin >> n;
cout << "输入每个项的系数和指数" << endl;
for (int i = 0; i < n; i++)
{
cin >> a[i].p>>a[i].e;
}
cout << "请输入多项式B项的个数" << endl;
cin >> m;
cout << "输入每个项的系数和指数" << endl;
for (int i = 0; i < m; i++)
{
cin >> b[i].p>>b[i].e;
}
int t = 0;
int j = 0;
int i = 0;
while(i<n&&j<m)
{
if (a[i].e == b[j].e)
{
if ((a[i].p + b[j].p )!= 0)
{
c[t].p = a[i].p + b[j].p;
c[t].e = a[i].e;
t++;
j++;
i++;
}
else
{
j++;
i++;
}
}
else if (a[i].e < b[j].e)
{
c[t].e = a[i].e;
c[t].p = a[i].p;
t++;
i++;
}
else
{
c[t].e = b[j].e;
c[t].p = b[j].p;
t++;
j++;
}
}
while (i < n)
{
c[t].e = a[i].e;
c[t].p = a[i].p;
t++;
i++;
}
while (j < m)
{
c[t].e = b[j].e;
c[t].p = b[j].p;
t++;
j++;
}
for (int k = 0; k <t; k++)
{
cout << "c[" << k << "]的系数为: " << c[k].p << " 指数为:" << c[k].e << endl;
}
}
四、测试结果
图二
图三