标签:一个 can struct pre iostream 乘法 多项式 main amp
设计函数分别求两个一元多项式的乘积与和。
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出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
5 20 -4 4 -5 2 9 1 -2 0
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 2000+10;
struct Node
{
int val,x;
};
Node a[maxn],b[maxn];
int ans[maxn];
// 整体思想就是用数组下标代表 指数,值代表项系数
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].val,&a[i].x);
}
int m;
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&b[i].val,&b[i].x);
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
ans[a[i].x+b[j].x]+=(a[i].val*b[j].val);
}
}
int cnt=0;
for(int i=2000;i>=0;i--)
{
if(ans[i]!=0)
{
if(cnt==0) {printf("%d %d",ans[i],i);cnt++;}
else {printf(" %d %d",ans[i],i);cnt++;}
}
}
if(cnt==0) printf("0 0");
printf("\n");
memset(ans,0,sizeof(ans));
for(int i=1;i<=n;i++)
{
ans[a[i].x]+=a[i].val;
}
for(int j=1;j<=m;j++)
{
ans[b[j].x]+=b[j].val;
}
cnt=0;
for(int i=2000;i>=0;i--)
{
if(ans[i]!=0)
{
if(cnt==0) {printf("%d %d",ans[i],i);cnt++;}
else printf(" %d %d",ans[i],i);
}
}
if(cnt==0) printf("0 0");
printf("\n");
return 0;
}
PTA 数据结构 一元多项式的乘法与加法运算 (仅供参考,请勿粘贴)
标签:一个 can struct pre iostream 乘法 多项式 main amp
原文地址:http://www.cnblogs.com/masterchd/p/7517831.html