以下是在平台运行通过的代码:
#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.另外需要注意非零系数个数的特殊情况,主要是空格的问题,在代码中也有注释,以及最后一组指数和系数输出后是没有空格的,容易出现格式错误。
整个代码的实现会有些复杂,希望经过不断练习后可以精简代码。