This time, you are supposed to find A×B where A and B are two polynomials.
Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial:
K N1 aN1 N2 aN2 … NK aNK
where K is the number of nonzero terms in the polynomial, Ni
and aNi (i=1,2,⋯,K) are the exponents and coefficients, respectively. It is given that 1≤K≤10, 0≤NK <⋯<N2 <N1 ≤1000.
Output Specification:
For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.
Sample Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 3 3.6 2 6.0 1 1.6
首先将两组数读入,然后进行多项式乘法,我用的方法是不存储指数的相关系数,而是直接存储整个项,再进行合并同类项。要注意的是指数为0的情况,以及系数为0的情况,在合并同类项的时候,系数为0的项不用输出。
#include<iostream>
#include<cstdio>
using namespace std;
struct num{
long index;
double coe;
};
int main(){
num a[11],b[11],c[101]={0};
long n,m,k=0,t=0,max=0,p;
cin>>n;
for (long i=0;i<n;i++){
cin>>a[i].index>>a[i].coe;
}
cin>>m;
for (long i=0;i<m;i++){
cin>>b[i].index>>b[i].coe;
}
for (long i=0;i<n;i++)
for (long j=0;j<m;j++){
c[k].index=a[i].index+b[j].index;
c[k].coe=a[i].coe*b[j].coe;
k++;
}
for (long i=0;i<k;i++)
for (long j=i+1;j<k;j++){
if (c[i].index==c[j].index){
c[i].coe+=c[j].coe;
c[j].coe=c[j].index=-1;
}
}
for (long i=0;i<k;i++)
if (c[i].index!=-1&&c[i].coe!=0) t++;
cout<<t;
while (t--){
max=-1;
for (long i=0;i<k;i++)
if (c[i].index>max&&c[i].index!=-1&&c[i].coe!=0){
max=c[i].index;
p=i;
}
c[p].index=-1;
printf(" %ld %.1lf",max,c[p].coe);
}
cout<<endl;
return 0;
}
欢迎指导和交流!