PAT1002 A+B for Polynomials (25分)

今日随笔–PAT (Advanced Level) Practice 1002@TOC

1002 A+B for Polynomials (25分)

花了点时间改进代码,其实用map很合适。
复习了map容器相关知识点

题意

看英文题目很不习惯,但是也没那么难懂。学习一些新单词:
polynomial–多项式
exponent-- 指数/幂
coefficient–系数
就是识别输入,然后对应项相加,精确到小数点后一位,诶,对了,提醒了我
double类型的数,printf("%.1lf",num)
不是%d是%lf
loat的话是printf("%.2f", f)

易错点:
1.直接用数组很简单,但是很不好(个人觉得),数组的利用率到不了1/100
2. 是降序输出的,map默认升序排序,倒着输出就行了
3. 系数可能为负,系数为0则不显示这项,要遍历删除系数为0的项
4. 特殊的,当没有系数不为0的项,如何显示。

#include<bits/stdc++.h>
#include<sstream>
#include <stdlib.h>
using namespace std;
int main(){
	double duo1[21];
	double duo2[21];
	int aaa=0;
	double temp;
	while(cin>>temp){
		duo1[aaa++]=temp;
		if(cin.get() =='\n') break;
	}
	aaa=0;
	while(cin>>temp){
		duo2[aaa++]=temp;
		if(cin.get() =='\n') break;
	}
	map<int,double>d1,d2;
	int num1=duo1[0]*2,num2=duo2[0]*2;
	for(int i=1;i<=num1;i++){
		d1[duo1[i]]=duo1[++i];
	}
	for(int i=1;i<=num2;i++){
		d2[duo2[i]]=duo2[++i];
	}
	map<int,double>::iterator it=d2.begin();
	for(;it!=d2.end();it++){
		d1[it->first]=d1[it->first]+d2[it->first];
	}
	map<int,double>::iterator itt=d1.begin();
	for(;itt!=d1.end();){
		if(itt->second==0) d1.erase(itt++);
		else itt++;
	}
	if(d1.size())cout<<d1.size()<<" ";
	else {
		cout<<"0";return 0;
	}
	itt=d1.end();
	itt--;
	for(;itt!=d1.begin();itt--){
		if(d1[itt->first]==0) continue;
		cout<<itt->first<<' ';
		printf("%.1lf ",d1[itt->first]);
	} if(d1[itt->first]!=0){
		cout<<itt->first<<' ';
		printf("%.1lf",d1[itt->first]);
	}
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值