PAT A 1002

在这里插入图片描述
以下是在平台运行通过的代码:

#include<iostream>
#include<string>
#include<stdlib.h>
#include<math.h>
#include<iomanip>
using namespace std;
class Polynomial
{
public:
	Polynomial();
	~Polynomial();
	Polynomial(int num);
	void add_Polynomial(Polynomial a , Polynomial b);
	void show();

private:
	int num; //当前多项式中非零项的个数
	double coef[1001];//index对应相应的阶数,相应的值对应相应阶数的值
};

Polynomial::Polynomial()
{
	num = 0;
	for (int i = 0; i < 1001; i++)
	{
		coef[i] = 0;
	}
}

Polynomial::~Polynomial()
{
}
Polynomial::Polynomial(int Num)
{
	int index;
	num = Num;
	for (int i = 0; i < 1001; i++)
	{
		coef[i] = 0;
	}
	while (Num)
	{
		cin >> index;
		cin >> coef[index];
		Num--;
	}
	
}
void  Polynomial::add_Polynomial(Polynomial a, Polynomial b)
{
	
	for (int i = 0; i < 1001; i++)
	{
		coef[i] = a.coef[i] + b.coef[i];
	}
	int count = 0;
	for (int j = 0; j < 1001; j++)
	{
		if (coef[j] != 0)
		{
			count ++;
		}
	}
	num = count;
	
}
void Polynomial::show()
{
	if (num == 0)//考虑0的特殊情况,如果是非零系数总共为0个,输出0之后不能有空格
	{
		cout << num;
	}
	else
	{
		cout << num << " ";
	}
	int count = 0;
	for (int i = 1000; i >= 0; i --)
	{
		if (coef[i] != 0)
		{
			count++;
			if (count == num)//当输出最后一组的指数和系数时后面不能加空格,因此此处也需要分情况
			{
				cout << i << " " << setiosflags(ios::fixed) << setprecision(1) << coef[i];
			}
			else
			{
				cout << i << " " << setiosflags(ios::fixed) << setprecision(1) << coef[i] << " ";
			}

			
		}
	}
}
int main()
{
	//FILE *streams;
	//freopen_s(&streams,"D://hl/temp/input.txt", "r", stdin);
	//freopen_s(&streams, "D://hl/temp/output.txt", "w", stdout);//输出重定向
	int a, b;
	cin >> a;
	Polynomial result_a;
	result_a = Polynomial(a);
	cin >> b;
	Polynomial result_b;
	result_b = Polynomial(b);
	Polynomial c = Polynomial();
	c.add_Polynomial(result_a, result_b);	
	c.show();
	//system("pause");//防止VS中控制台应用程序闪退问题
	return 0;
}

需要注意的:
1.题目中给出的变量范围,以便给出正确的数组大小,比如这道题,最初我把指数的范围看错了,所以刚开始定义的数组大小给错了。
2.另外需要注意非零系数个数的特殊情况,主要是空格的问题,在代码中也有注释,以及最后一组指数和系数输出后是没有空格的,容易出现格式错误。

整个代码的实现会有些复杂,希望经过不断练习后可以精简代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值