题目描述: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.6AC代码:
#include<cstdio> #include<map> using namespace std; int main(int argc,char *argv[]) { int k1,k2; int exp; float coef; int i,j; map<int,float> m1; map<int,float> m2; map<int,float> m3; scanf("%d",&k1); for(i=0;i<k1;i++) { scanf("%d%f",&exp,&coef); m1.insert(pair<int,float>(exp,coef)); } scanf("%d",&k2); for(j=0;j<k2;j++) { scanf("%d%f",&exp,&coef); m2.insert(pair<int,float>(exp,coef)); } map<int,float>::iterator it1=m1.begin(); for(;it1!=m1.end();it1++) { map<int,float>::iterator it2=m2.begin(); for(;it2!=m2.end();it2++) { exp=it1->first+it2->first;//指数相加 coef=it1->second*it2->second;//系数相乘 map<int,float>::iterator it3; it3=m3.find(exp); if(it3==m3.end())//生成新的指数,且系数不为零则插入 { if(coef==0) ; else m3.insert(pair<int,float>(exp,coef)); } else//更新系数即可 { coef=coef+it3->second; if(coef==0) m3.erase(it3); else { m3.erase(it3); m3.insert(pair<int,float>(exp,coef)); } } } } if(!m3.empty()) { printf("%lu",m3.size()); map<int,float>::iterator it3=m3.end(); it3--; for(;it3!=m3.begin();it3--) printf(" %d %.1f",it3->first,it3->second); printf(" %d %.1f",it3->first,it3->second); printf("\n"); } else printf("0\n");//结果为零的特殊情况 return 0; }
#include <stdio.h> #include <stdlib.h> typedef struct { int expo;//指数 double coef;//系数 }poly; int main() { int k1, k2; poly *a, *b; int i,j; int max;//能够出现的最大指数 poly *c; int zhishu, xishu; int count; while(scanf("%d", &k1) != EOF) { a = (poly *)malloc(k1 * sizeof(poly)); for(i = 0; i < k1; i ++) { scanf("%d %lf", &a[i].expo, &a[i].coef); } scanf("%d", &k2); b = (poly *)malloc(k2 * sizeof(poly)); for(i = 0; i < k2; i ++) { scanf("%d %lf", &b[i].expo, &b[i].coef); } max = a[0].expo + b[0].expo; c = (poly *)malloc((max + 1) * sizeof(poly)); for(i = 0; i <= max; i ++) { c[i].expo = i; c[i].coef = 0; }//初始化结果 for(i = 0; i < k1; i ++) { for(j = 0; j < k2; j ++) { zhishu = a[i].expo + b[j].expo; c[zhishu].coef += a[i].coef * b[j].coef; } } count = 0; for(i = 0; i <= max; i ++) { if(c[i].coef != 0) { count ++; } } printf("%d", count); for(i = max; i >= 0; i --) { if(c[i].coef != 0) { printf(" %d %.1lf", i, c[i].coef); } } printf("\n"); } return 0; }
Pat(Advanced Level)Practice--1009(Product of Polynomials)
原文:http://blog.csdn.net/cstopcoder/article/details/19075069