题解 02-线性结构2 一元多项式的乘法与加法运算(mooc浙大数据结构)

原题目地址请移步此处(习题集已关闭,无法提交):点击此处

题目

在这里插入图片描述
Input:

4 3 4 -5 2  6 1  -2 0
3 5 20  -7 4  3 1

Output:

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<bits/stdc++.h>
using namespace std;

int base1[1005],base2[1005],n1,n2,len1,len2;
int cul[100005],sum[100005],counter=0;
int counter1=0,counter2=0;
typedef struct
{
	 int base,power;
}node;
node _cul[100005],_sum[10005];

int main()
{
	 for(int i=0;i<1005;i++) base1[i]=0,base2[i]=0; 
	 scanf("%d",&n1);
	 for(int i=0;i<2*n1;i+=2){
	 	 int t1,t2;
	 	 scanf("%d%d",&t1,&t2);
	 	 base1[t2]=t1;
	 	 if(i==0) len1=t2;
	 }
	 scanf("%d",&n2);
	 for(int i=0;i<2*n2;i+=2){
	 	 int t1,t2;
	 	 scanf("%d%d",&t1,&t2);
	 	 base2[t2]=t1;
	 	 if(i==0) len2=t2;
	 }
	 for(int i=0;i<=(n1-1)*(n2-1);i++) cul[i]=0,sum[i]=0;
	 for(int i1=0;i1<=len1;i1++){
	 	 for(int i2=0;i2<=len2;i2++){
	 	 	 cul[i1+i2]+=(base1[i1]*base2[i2]);
	 	 	 counter=max(counter,i1+i2);
		 }
	 }
	 for(int i=counter;i>=0;i--){
	 	 if(cul[i]==0) continue;
	 	 _cul[counter1].base=cul[i];
	 	 _cul[counter1++].power=i;
	 }
	 for(int i=max(len1,len2);i>=0;i--){
	 	 sum[i]=base1[i]+base2[i];
	 	 if(sum[i]==0) continue;
	 	 _sum[counter2].base=sum[i];
	 	 _sum[counter2++].power=i;
	 }
	 if(counter1!=0) for(int i=0;i<counter1;i++) if(i==counter1-1) printf("%d %d",_cul[i].base,_cul[i].power); else printf("%d %d ",_cul[i].base,_cul[i].power);
	 else printf("0 0");
	 printf("\n");
	 if(counter2!=0) for(int i=0;i<counter2;i++) if(i==counter2-1) printf("%d %d",_sum[i].base,_sum[i].power); else printf("%d %d ",_sum[i].base,_sum[i].power);
	 else printf("0 0");
	 return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值