您的位置:首页 > 其它

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

2017-10-28 19:44 465 查看
这个就是用数组模拟一下,下标的方式,表示对应的指数,然后记得要以指数递减的方式输出一下


输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。


输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出
0
0

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <math.h>
#include <stack>
#include <utility>
#include <string>
#include <sstream>
#include <cstdlib>
#include <set>
#define LL long long
using namespace std;
const int INF = 0x3f3f3f3f;
const int maxn = 10000 + 10;
int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}};
int a[maxn],b[maxn];
int f[maxn];
void print()
{
int flag = 0;
for(int i = maxn;i >= 0;i--)
{
if(f[i])
{
if(flag) putchar(' ');
printf("%d %d",f[i],i);
flag++;
}
}
if(!flag)
{
printf("0 0");
}
printf("\n");
}
int main()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(f,0,sizeof(f));
int m,n;
scanf("%d",&m);
for(int i = 0; i < m; i++)
{
int x,y;
scanf("%d %d",&x,&y);
a[y]+=x;
}
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
int x,y;
scanf("%d %d",&x,&y);
b[y]+=x;
}
for(int i = maxn; i >= 0; i--)
{
if(a[i])
{
for(int j = 0; j < maxn; j++)
{
if(b[j])
{
f[i+j] += a[i]*b[j];
}

}
}
}
print();
memset(f,0,sizeof(f));
for(int i = maxn;i >= 0;i--)
{
if(a[i])
{
f[i] += a[i];
}
}
for(int i = 0;i < maxn;i++)
{
if(b[i])
{
f[i] += b[i];
}
}
print();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: