1009

来源:互联网 发布:淘宝代销怎么上传宝贝 编辑:程序博客网 时间:2024/06/15 14:07
#include <iostream>#include <cmath>#include <cstring>using namespace std;const double MIN = 0.0000001;const int K = 10;struct EC{int exponents; //次数double coefficients; //系数};EC a[K];EC b[K];EC c[K][K*K];EC result[K*K];void Add(EC p1[], const int& counta, EC p2[], const int& countb, EC p3[], int& k){int i = 0, j = 0;k = 0;while(i<counta&&j<countb){int a1 = p1[i].exponents;int b1 = p2[j].exponents;double a2 = p1[i].coefficients;double b2 = p2[j].coefficients;if(a1 > b1){p3[k].exponents = a1;p3[k].coefficients = a2;k++;i++;}else if(a1 < b1){p3[k].exponents = b1;p3[k].coefficients = b2;k++;j++;}else{if(fabs(a2+b2) > MIN) // ==0{p3[k].exponents = a1;p3[k].coefficients = a2+b2;k++;}i++;j++;}}while(i<counta){p3[k].exponents = p1[i].exponents;p3[k].coefficients = p1[i].coefficients;k++;i++;}while(j<countb){p3[k].exponents = p2[j].exponents;p3[k].coefficients = p2[j].coefficients;k++;j++;}}void Product(EC p1[K], const int& counta, EC p2[K], const int& countb, EC p3[K][K*K], int& count){for(int i=0; i<counta; i++){for(int j=0; j<countb; j++){p3[i][j].exponents = p1[i].exponents+p2[j].exponents;p3[i][j].coefficients = p1[i].coefficients*p2[j].coefficients;}}memcpy(result, p3[0], sizeof(EC)*countb);count = countb;int countc;for(int i=1; i<counta; i++){countc = count;Add(p3[i-1], countc, p3[i], countb, result, count);memcpy(p3[i], result, sizeof(EC)*count);}}int main(){int counta, countb, i, k;cin>>counta;for(i=0;i<counta;i++)cin>>a[i].exponents>>a[i].coefficients;cin>>countb;for(i=0;i<countb;i++)cin>>b[i].exponents>>b[i].coefficients;Product(a, counta, b, countb, c, k);cout<<k;if(k!=0){cout.setf(ios::fixed);cout.precision(1);for(int t=0; t<k; t++)cout<<" "<<result[t].exponents<<" "<<result[t].coefficients;}cout<<endl;return 0;}

--------------------

也可以用数组统计所有次数的,乘法就是数组的之间乘法。。。