64,654
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <vector>
using namespace std;
//=============================================================================================================================
/// 多项式类
/**
@remarks
p(x) = C[0]x^(N-1) + C[1]x^(N-2) + C[2]x^(N-3) + ... + C[N-1]
@note
a、将多项式封装成一个类;
b、将加减乘封装成类的友元函数;
c、多项式的构造函数初始化一个多项式;
d、在main函数中分别输入两个多项式的系数,调用构造函数初始化成两个多项式对象,计算这两个多项式的加减乘法结果并输出。
e、(可选)用程序实现将多项式的系数,及运算结果保存到文件当中。
**/
//=============================================================================================================================
class Polynomial
{
private:
int m_length{};
int *m_coefficients{};
public:
Polynomial() = default;
Polynomial(int coefficients[], int length):
m_length{length},
m_coefficients{new int[length]{}}
{
for (int i = 0; i < length; i++)
{
m_coefficients[i] = coefficients[i];
}
}
~Polynomial()
{
delete[] m_coefficients;
}
friend Polynomial operator+(const Polynomial &p1, const Polynomial &p2)
{
int len = p1.m_length > p2.m_length ? p1.m_length : p2.m_length;
int *coefs = new int[len];
for(int i = len - p1.m_length; i < len; i++)
{
coefs[i] = p1.m_coefficients[i - len + p1.m_length];
}
for(int i = len - p2.m_length; i < len; i++)
{
coefs[i] += p2.m_coefficients[i - len + p2.m_length];
}
return Polynomial(coefs, len);
}
friend Polynomial operator-(const Polynomial &p1, const Polynomial &p2)
{
int len = p1.m_length > p2.m_length ? p1.m_length : p2.m_length;
int *coefs = new int[len];
for(int i = len - p1.m_length; i < len; i++)
{
coefs[i] = p1.m_coefficients[i - len + p1.m_length];
}
for(int i = len - p2.m_length; i < len; i++)
{
coefs[i] -= p2.m_coefficients[i - len + p2.m_length];
}
return Polynomial(coefs, len);
}
friend Polynomial operator*(const Polynomial &p1, const Polynomial &p2)
{
int len = p1.m_length + p2.m_length;
int *coefs = new int[len - 1];
for(int i = 0; i < p1.m_length; i++)
{
for(int j = 0; j < p2.m_length; j++)
{
int index = len - p1.m_length - p2.m_length + i + j;
coefs[index] += p1.m_coefficients[i] * p2.m_coefficients[j];
}
}
return Polynomial(coefs, len - 1);
}
void print() const
{
if(m_length == 0)
{
return;
}
int len = m_length - 1;
for(int i = 0 ; i < len; i++)
{
cout << m_coefficients[i] << "x^" << len - i << " + ";
}
cout << m_coefficients[len] << endl;
}
};
int main()
{
int a[] = {3, 2, 1}, b[] = {2, 1};
Polynomial p1(a, sizeof(a)/sizeof(a[0]));
Polynomial p2(b, sizeof(b)/sizeof(b[0]));
Polynomial p3 = p1 + p2;
Polynomial p4 = p1 - p2;
Polynomial p5 = p1 * p2;
p1.print();
p2.print();
cout << "Result:" << endl;
p3.print();
p4.print();
p5.print();
return 0;
}