7-1(链表) 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
AC代码
#include<stdio.h>
#define MAX_DEF 1010
#define DOU_MAX 2025
#define max 1000
//void Create(int ar[]) {
// int n,b,a;
// scanf("%d",&n);
// for(int i=0; i<n; i++) {
// scanf("%d%d",&a,&b);
// ar[b]=a;
// }
//}
void Add(int a1[],int a2[],int b[]) {
for(int i=0; i<1001; i++)
b[i]=a1[i]+a2[i];
}
void OutPut(int ar[],int range) {
int p=0;
for(int i=range; i>=0; i--) {
if(ar[i]!=0) {
if(p)putchar(' ');
printf("%d %d",ar[i],i);
p=1;
}
}
if(!p)printf("0 0");
}
void Mul(int a1[],int a2[],int b[]) {
for(int i=0; i<1001; i++) {
for(int j=0; j<1001; j++) {
b[i+j]+=a1[i]*a2[j];
}
}
}
int main() {
int a,i,b,j,n1,n2;
int ar2[MAX_DEF]= {0};
int ar1[MAX_DEF]= {0};
int ADDar[MAX_DEF] = {0};
int MULar[DOU_MAX]= {0};
// Create(ar1);
// Create(ar2);
scanf("%d", &n1);
for(i = 0; i < n1; ++i)
{
scanf("%d%d", &a, &b);
ar1[b] = a;
}
scanf("%d", &n2);
for(i = 0; i < n2; ++i)
{
scanf("%d%d", &a, &b);
ar2[b] = a;
}
// Add(ar1,ar2,ADDar);
//
// Mul(ar1,ar2,MULar);
for(i = 0; i <= max; ++i)
{
for(j = 0; j <= max; ++j)
{
MULar[i + j] += ar1[i] *ar2[j];
}
}
//计算加法
for(i = 0; i <= max; ++i)
{
ADDar[i] = ar1[i] +ar2[i];
}
OutPut(MULar,2001);
putchar('\n');
OutPut (ADDar,1001);
return 0;
}