解題思路:
思路1.構造多項式結構體和項結構體,寫出多項式加法函數和乘法函數,乘法就是多項式的冪相加、係數相乘,然後多項式相加。
思路2.使用數組表示,下標表示冪,值表示係數,邊輸入,邊處理改變該數組的值。(思路不要被數學形式所約束,)
思路1的實現:
#include <iostream>
using namespace std;
typedef struct{
int e;
float c;
}term;
typedef struct{
term data[100];
int len;
}poly;
poly poly_add(poly a, poly b){
poly s;
int i = 0, j = 0, k = 0;
while(i < a.len && j < b.len){
if(a.data[i].e > b.data[j].e){
s.data[k++] = a.data[i++];
}else if(a.data[i].e == b.data[j].e){
if(a.data[i].c+b.data[j].c != 0.0){
s.data[k].e = a.data[i].e;
s.data[k++].c = a.data[i++].c + b.data[j++].c;
}else{
i++;
j++;
}
}else{
s.data[k++] = b.data[j++];
}
}
while(i < a.len) s.data[k++] = a.data[i++];
while(j < b.len) s.data[k++] = b.data[j++];
s.len = k;
return s;
}
void poly_multiple(poly a, poly b, poly &ans){
ans.len = 0;
poly temp;
temp.len = a.len;
for(int j = 0; j < b.len; j++){
if(b.data[j].c == 0.0){
continue;
}
for(int i = 0; i < a.len; i++){
temp.data[i].e = a.data[i].e + b.data[j].e;
temp.data[i].c = a.data[i].c * b.data[j].c;
}
ans = poly_add(ans, temp);
}
}
int main(){
int n;
poly a, b, ans;
cin>>n;
a.len = n;
for(int i = 0; i < n; i++){
cin>>a.data[i].e>>a.data[i].c;
}
cin>>n;
b.len = n;
for(int i = 0; i < n; i++){
cin>>b.data[i].e>>b.data[i].c;
}
poly_multiple(a, b, ans);
cout<<ans.len;
for(int i = 0; i < ans.len; i++){
printf(" %d %.1f", ans.data[i].e, ans.data[i].c);
}
return 0;
}