1009 Product of Polynomials 之巧用map做多项式

1. 题目

在这里插入图片描述

2. 分析

题意:测试案例给出两行,每行代表一个多项式,多项式由指数和系数构成,现在要求根据给出的两个多项式,计算两个多项式的乘法结果,结果同样根据所给的格式输出。

3. 解题过程

  1. 这是一个简单模拟,模拟多项式的乘法,所以我们需要找到一个容器才模拟多项式,于是会想到创建一个map来充当一个多项式,具体就是把每个指数对应一个系数,然后模拟乘法的次序进行相加。
  2. 整体思路即为创建三个map,两个map用来接收所给的两个多项式,剩下一个作为乘法的结果多项式。
  3. 请看代码实现:
#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<int, double> A;
	map<int, double> B;
	int a, b; double c;
	scanf("%d", &a);
	for(int i = 0; i < a; i++)
	{
		scanf("%d %lf", &b, &c);
		A[b] = c;
	}
	scanf("%d", &a);
	for(int i = 0; i < a; i++)
	{
		scanf("%d %lf", &b, &c);
		B[b] = c;
	}
	map<int, double> ans;
	for(auto it = A.begin(); it != A.end(); it++)
	{
		for(auto it1 = B.begin(); it1 != B.end(); it1++)
		{
			b = it->first + it1->first;
			c = it->second * it1->second;
			ans[b] += c;
			if(ans[b] == 0) //需要注意若系数为零,则该项需要删除!
			{
				auto it4 = ans.find(b);
				ans.erase(it4);
			}
		}
	}
	printf("%d", ans.size());
	auto it2 = ans.end(); //因为map有自动排序的功能,所以从后往前输出即为所要的格式输出。
	it2 --;
	for(int i = 0; i < ans.size(); i++)
	{
		printf(" %d %.1lf", it2->first, it2->second);
		it2--;
	}
	return 0;
}

4. 小结

  1. 再一次彰显了map的功能强大,应对此简单模拟显得绰绰有余。
  2. 重温了map的删除语法:name.erase(it)或者name.erase(it, it+len).

感谢阅读,素质三连

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值