1009. Product of Polynomials (25)
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 Input2 1 2.4 0 3.2 2 2 1.5 1 0.5Sample Output
3 3 3.6 2 6.0 1 1.6
这是一道中等题,求多项式的乘法,这道题与1002号题目多项式的加法相比,只是多了一个乘法的函数productTerm,难度基本和1002题相当,只是本题中的addTerm函数要确保参数中有一个为空时,能够返回另一个参数作为他们的和。代码如下
#include<string>
#include<vector>
#include<iostream>
#include <iomanip>
using namespace std;
typedef struct term{
int exponent;
double coefficient;
}Term;
vector<Term> addTerm( vector<Term>& a , vector<Term>& b ){
int i,j;//i为a下标,j为b下标
vector<Term> sum;
Term temp;
bool isend_a = false ,isend_b = false ;
if ( a.empty() && b.empty() )
cout<<"Error";
else if( a.empty() )
return b;
else if( b.empty() )
return a;
for ( i = 0 , j = 0 ; !(isend_a && isend_b) ; ){
if ( !isend_a && !isend_b && a[i].exponent == b[j].exponent ){
temp.exponent = a[i].exponent;
temp.coefficient = a[i].coefficient + b[j].coefficient;
if ( temp.coefficient != 0 )
sum.push_back(temp);
i++;j++;
}
else if( !isend_a && !isend_b && a[i].exponent > b[j].exponent ){
temp = a[i];
sum.push_back(temp);
i++;
}else if( !isend_a && !isend_b && a[i].exponent < b[j].exponent ){
temp = b[j];
sum.push_back(temp);
j++;
}
//--------------------------------
if ( i == a.size() ){
isend_a = true;
i = -1;
}
if ( j == b.size() ){
isend_b = true;
j = -1;
}
//--------------------------------
if ( isend_a && isend_b ){
//a和b都遍历到了最后一个就结束循环
}else if ( isend_a && !isend_b ){
temp = b[j];
sum.push_back(temp);
j++;
}else if ( !isend_a && isend_b ){
temp = a[i];
sum.push_back(temp);
i++;
}
}
return sum;
}
vector<Term> productTerm( vector<Term>& a , vector<Term>& b ){
int i,j;
Term temp;
vector<Term> sum,tempa;
for ( i = 0 ; i < a.size() ; i++ ){
for ( j = 0 ; j < b.size() ; j++ ){
temp.coefficient = a[i].coefficient * b[j].coefficient;
temp.exponent = a[i].exponent + b[j].exponent;
tempa.push_back(temp);
}
sum = addTerm( sum , tempa );
tempa.clear();//清空临时变量
}
return sum;
}
int main(){
int num,i;
vector<Term> a,b,c;
Term temp;
cin>>num;
for ( i = 0 ; i < num ; i++ ){
cin>>temp.exponent>>temp.coefficient;
a.push_back(temp);
}
cin>>num;
for ( i = 0 ; i < num ; i++ ){
cin>>temp.exponent>>temp.coefficient;
b.push_back(temp);
}
c = productTerm( a , b );
//-----------------------显示结果-------------------------
cout<<c.size();
for ( i = 0 ; i < c.size() ; i++ ){
cout<<fixed<<setprecision(1);
cout<<" "<<c[i].exponent<<" "<<c[i].coefficient;
}
return 0;
}