PTA 数据结构 一元多项式的乘法与加法运算 (仅供参考,请勿粘贴)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA 数据结构 一元多项式的乘法与加法运算 (仅供参考,请勿粘贴)相关的知识,希望对你有一定的参考价值。
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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 数据结构 一元多项式的乘法与加法运算 (仅供参考,请勿粘贴)的主要内容,如果未能解决你的问题,请参考以下文章