【三种解法+满分+详解】
设计函数分别求两个一元多项式的乘积与和。
输入格式:
输入分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
C
/*此题的数组长度应比2000大;
在乘法运算时1000+1000=2000;
指数相加的最大值是2000;
故数组的长度一定要比2000;
*/
#include<stdio.h>
int main()
{
//指数相加的最大值为2000;
int j,h[10000]={0},h1[10000]={0},m1[10000]={0},m[10000]={0},k=0,k1=0,t1[2000]={0},t[2000]={0};
int n,m3,a[10000]={0},a1[10000]={0},b[10000]={0},b1[10000]={0},c[10000]={0},c1[10000]={0},d[10000]={0},d1[2000]={0},i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d %d",&a[i],&a1[i]);
d[a1[i]]=d[a1[i]]+a[i];
}
scanf("%d",&m3);
for(i=0;i<m3;i++)
{
scanf("%d %d",&b[i],&b1[i]);
d[b1[i]]=d[b1[i]]+b[i];
}
k=0;
for(i=0;i<n;i++)
{
for(j=0;j<m3;j++)//不可以此处写k++;
{
c[k]=a[i]*b[j];
c1[k]=a1[i]+b1[j];//多项式相乘,系数相乘,指数相加;
h[c1[k]]=h[c1[k]]+c[k];
k++;//易错点:否则当j取到m3时跳出循环;
//就不再执行k++;就少算了;
}
}
k1=0;
for(i=2000;i>=0;i--)//乘法运算;
{
if(h[i]!=0)
{
m[k1]=h[i];//m数组用来储存乘法运算结果的系数;
m1[k1]=i;//m1来储存乘法运算结果后的指数;
k1++;
}
}
for(i=0;i<k1;i++)
{
printf("%d %d",m[i],m1[i]);
if(i<k1-1) printf(" ");
}
if(k1==0)
{
printf("0 0");//输出零多项式;
}
printf("\n");
k=0;
for(i=2000;i>=0;i--)
{
if(d[i]!=0)
{
t[k]=d[i];
t1[k]=i;
k++;
}
}
for(i=0;i<k;i++)## 标题
{
printf("%d %d",t[i],t1[i]);
if(i<k-1) printf(" ");
}
if(k==0) printf("0 0");//有零多项式;
return 0;
}
C++
/*此题的数组长度应比2000大;
在乘法运算时1000+1000=2000;
指数相加的最大值是2000;
故数组的长度一定要比2000;
*/
#include<iostream>
using namespace std;
int main()
{
//指数相加的最大值为2000;
int j,h[10000]={0},h1[10000]={0},m1[10000]={0},m[10000]={0},k=0,k1=0,t1[2000]={0},t[2000]={0};
int n,m3,a[10000]={0},a1[10000]={0},b[10000]={0},b1[10000]={0},c[10000]={0},c1[10000]={0},d[10000]={0},d1[2000]={0},i;
cin>>n;
for(i=0;i<n;i++)
{
cin>>a[i]>>a1[i];
d[a1[i]]=d[a1[i]]+a[i];
}
cin>>m3;
for(i=0;i<m3;i++)
{
cin>>b[i]>>b1[i];
d[b1[i]]=d[b1[i]]+b[i];
}
k=0;
for(i=0;i<n;i++)
{
for(j=0;j<m3;j++)//不可以此处写k++;
{
c[k]=a[i]*b[j];
c1[k]=a1[i]+b1[j];//多项式相乘,系数相乘,指数相加;
h[c1[k]]=h[c1[k]]+c[k];
k++;//易错点:否则当j取到m3时跳出循环;
//就不再执行k++;就少算了;
}
}
k1=0;
for(i=2000;i>=0;i--)//乘法运算;
{
if(h[i]!=0)
{
m[k1]=h[i];//m数组用来储存乘法运算结果的系数;
m1[k1]=i;//m1来储存乘法运算结果后的指数;
k1++;
}
}
for(i=0;i<k1;i++)
{
cout<<m[i]<<" "<<m1[i];
if(i<k1-1) cout<<" ";
}
if(k1==0)
{
cout<<"0 0";//输出零多项式;
}
cout<<endl;
k=0;
for(i=2000;i>=0;i--)
{
if(d[i]!=0)
{
t[k]=d[i];
t1[k]=i;
k++;
}
}
for(i=0;i<k;i++)
{
cout<<t[i]<<" "<<t1[i];
if(i<k-1) cout<<" ";
}
if(k==0) cout<<"0 0";//有零多项式;
return 0;
}