标签:cin lis ber script end html 数字 please reset
This time, you are supposed to find A×B where A and B are two polynomials.
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.
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.
2 1 2.4 0 3.2
2 2 1.5 1 0.5
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
标签:cin lis ber script end html 数字 please reset
原文地址:https://www.cnblogs.com/zzw1024/p/11173395.html