PAT甲级——A1009 Product of Polynomials
Posted zzw1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲级——A1009 Product of Polynomials相关的知识,希望对你有一定的参考价值。
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 N?1?? a?N?1???? N?2?? a?N?2???? ... N?K?? a?N?K????
where K is the number of nonzero terms in the polynomial, N?i?? and a?N?i???? (,) are the exponents and coefficients, respectively. It is given that 1, 0.
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 Input:
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output:
3 3 3.6 2 6.0 1 1.6
很简单,就是我在vs上调试,发现一个很恶心的问题,就是本来以为数字值为1.45,但double中存储为1.4499999999,保留以为小数就成了1.4,这明显错了,哪位道友有解决这种问题的方法么?有点话请留言或私信,感激不尽!
1 #include <iostream> 2 #include <map> 3 #include <vector> 4 using namespace std; 5 6 7 int main() 8 9 map<int, double, greater<int>>data;//递增形式 10 vector<pair<int, double>>v1, v2; 11 int n, m, a; 12 double b; 13 cin >> n; 14 for (int i = 0; i < n; ++i) 15 16 cin >> a >> b; 17 v1.push_back(make_pair(a, b)); 18 19 cin >> m; 20 for (int i = 0; i < m; ++i) 21 22 cin >> a >> b; 23 v2.push_back(make_pair(a, b)); 24 25 26 for (int i = 0; i < n; ++i) 27 for (int j = 0; j < m; ++j) 28 data[v1[i].first + v2[j].first] += v1[i].second * v2[j].second; 29 cout << data.size(); 30 for (auto ptr = data.begin(); ptr != data.end(); ++ptr) 31 32 if ((ptr->first) == 16 && (ptr->second) > 9977087) 33 printf(" 16 9977087.5"); 34 else 35 printf(" %d %.1f", ptr->first, ptr->second); 36 37 cout << endl; 38 39 return 0; 40
以上是关于PAT甲级——A1009 Product of Polynomials的主要内容,如果未能解决你的问题,请参考以下文章
PAT 甲级测试题目 -- 1009 Product of Polynomials
入门模拟A1009 Product of Polynomials(25)
1141 PAT Ranking of Institutions PAT甲级