该题没什么难度,注意最后去除系数为0的项。我用了map<int, double>来保存结果的指数、系数对,正好指数是唯一的。
#include <iostream> #include <map> #include <fstream> #include <iomanip> using namespace std; double *A[2]; map<int, double> result; int main() { //fstream cin("a.txt"); int i = 0; int N[2]; while (i < 2) { cin>>N[i]; A[i] = new double[2 * N[i]]; int tmp = 0;; while (tmp < 2 * N[i]) { cin>>A[i][tmp]; tmp++; } i++; } for(int i = 0; i < 2 * N[0]; i += 2) { for(int j = 0; j < 2 * N[1]; j += 2) { double coefficient = A[0][i + 1] * A[1][j + 1]; int exponent = A[0][i] + A[1][j]; if(result[exponent] != 0) result[exponent] += coefficient; else result[exponent] = coefficient; } } for(map<int, double>::iterator it = result.begin(); it != result.end(); it++) { if((*it).second == 0) result.erase(it); } cout<<result.size(); for(map<int, double>::reverse_iterator rit = result.rbegin(); rit != result.rend(); rit++) { cout<<" "<<(*rit).first<<" "<<fixed<<setprecision(1)<<(*rit).second; } return 0; }