浙大 PAT Advanced level 1009. Product of Polynomials
2016-04-23 20:27
399 查看
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 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
多项式的乘法,用链表做比较复杂,用map容器可以做的非常简单,记得最后剔除系数为0的项即可
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 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
多项式的乘法,用链表做比较复杂,用map容器可以做的非常简单,记得最后剔除系数为0的项即可
#include <iostream> #include <map> #include <iomanip> using namespace std; int main() { map<int, float> poly_fir; map<int, float> poly_sec; map<int, float> result; int n; int exp; float coe; int count = 0; cin >> n; while(n--) { cin >> exp >> coe; poly_fir.insert(make_pair(exp, coe)); } cin >> n; while(n--) { cin >> exp >> coe; poly_sec.insert(make_pair(exp, coe)); } for (map<int, float>::const_iterator it_fir = poly_fir.begin(); it_fir != poly_fir.end(); ++it_fir) { for (map<int, float>::const_iterator it_sec = poly_sec.begin(); it_sec != poly_sec.end(); ++it_sec) { result[it_fir->first + it_sec->first] += it_fir->second * it_sec->second; } } for (map<int, float>::iterator iter = result.begin(); iter != result.end(); ) { if (0 == iter->second) { result.erase(iter++); } else { ++iter; ++count; } } cout << count; for (map<int, float>::reverse_iterator iter = result.rbegin(); iter != result.rend(); ++iter) { cout << ' ' << iter->first << ' '; cout << fixed << setprecision(1) << iter->second; } cout << endl; system("pause"); return 0; }
相关文章推荐
- MYSQL mysql.user表中权限对应的解释
- iOS 数据持久化(2):SQLite3
- java学习重点
- 矩形覆盖
- 机房收费系统~导出Excel
- 让图片抖动起来
- Windows 7下安装MongoDB
- 如何准备阿里社招面试,顺谈Java程序员学习中各阶段的建议
- alias
- Node.js RESTful API
- linux 下的Sqlite和mysql操作
- 高光谱ENVI使用教程之直方图
- 分析Linux 0.11中的任务切换
- bzoj 3229: [Sdoi2008]石子合并
- 响应式设计媒体查询尺寸分界点一览表
- Java OOP 思想
- boosting与bagging理解
- 关于正则表达式中过度匹配问题解决方法
- zabbix-agent安装和配置
- Add Two Numbers