📄 ploynomial.cpp
字号:
#include "StdAfx.h"
#include ".\ploynomial.h"
CPloyNomial::CPloyNomial(void)
{
}
CPloyNomial::CPloyNomial(CPloyNomial &ployNomial)
{
for(int i=0;i<ployNomial.m_PolyNomial.GetCount();i++)
{
m_PolyNomial.InsertTail(ployNomial.m_PolyNomial.GetAt(i));
}
}
CPloyNomial::~CPloyNomial(void)
{
}
//向多项式添加元素
void CPloyNomial::AddItem(CPolyItem mItem)
{
m_PolyNomial.InsertHead(mItem);
}
//重载=号,以方便多项式的符值
CPloyNomial & CPloyNomial::operator =(const CPloyNomial &ployNomial)
{
m_PolyNomial=ployNomial.m_PolyNomial;
return *this;
}
//重载-号,实现多项式的减法
CPloyNomial CPloyNomial::operator -(CPloyNomial &ployNomial)
{
CPolyItem tempItem(-1,0);
CPloyNomial temp,temp1,result;
temp.AddItem(tempItem);
temp1=ployNomial*temp;
temp=*this;
result=temp+temp1;
return result;
}
//重载*号实现多项式的乘
CPloyNomial CPloyNomial::operator *(CPloyNomial &ployNomial)
{
int i,j,m,n;
i=j=0;
m=m_PolyNomial.GetCount();
n=ployNomial.m_PolyNomial.GetCount();
CPloyNomial result;
for(int i=0;i<n;i++)
{
CPloyNomial temp;
for(int j=0;j<m;j++)
{
temp.AddItem(ployNomial.m_PolyNomial.GetAt(i)*m_PolyNomial.GetAt(j));
}
result=result+temp;
}
result.m_PolyNomial.Sort();
return result;
}
//实现多项式的加法
const CPloyNomial CPloyNomial::operator +(CPloyNomial &ployNomial)
{
m_PolyNomial.Sort();
ployNomial.m_PolyNomial.Sort();
int i,j;
i=j=0;
CPloyNomial temp;
while(i<m_PolyNomial.GetCount()&&j<ployNomial.m_PolyNomial.GetCount())
{
if(m_PolyNomial.GetAt(i)<ployNomial.m_PolyNomial.GetAt(j))
{
temp.AddItem(ployNomial.m_PolyNomial.GetAt(j++));
}
else if(m_PolyNomial.GetAt(i)==ployNomial.m_PolyNomial.GetAt(j))
{
CPolyItem sum=m_PolyNomial.GetAt(i)+ployNomial.m_PolyNomial.GetAt(j);
if(!sum.IsNULL())
temp.AddItem(sum);
i++;j++;
}
else if(m_PolyNomial.GetAt(i)>ployNomial.m_PolyNomial.GetAt(j))
{
temp.AddItem(m_PolyNomial.GetAt(i++));
}
}
if(i<m_PolyNomial.GetCount())
{
while(i<m_PolyNomial.GetCount())
{
temp.AddItem(m_PolyNomial.GetAt(i));
i++;
}
}
else if(j<ployNomial.m_PolyNomial.GetCount())
{
while(j<ployNomial.m_PolyNomial.GetCount())
{
temp.AddItem(ployNomial.m_PolyNomial.GetAt(j));
j++;
}
}
temp.m_PolyNomial.Sort();
//temp.Format();
return temp;
}
//删除多项式的首元素
void CPloyNomial::RemoveItem(void)
{
m_PolyNomial.RemoveHead();
}
//把多项式编程输出格式的字符串
CString CPloyNomial::ToString(void)
{
if(!m_PolyNomial.IsEmpt())
{
CString temp;
//m_PolyNomial.Sort();
//m_PolyNomial.Reversal();
Format();
temp.Format("%0.2fX^%d",this->m_PolyNomial.GetHead().GetCoef(),this->m_PolyNomial.GetHead().GetExpn());
for(int i=1;i<this->m_PolyNomial.GetCount();i++)
{
CString str;
//str.Format("+%fX^%d",m_PolyNomial.GetAt(i).GetCoef(),m_PolyNomial.GetAt(i).GetExpn());
temp+=m_PolyNomial.GetAt(i).ToString();
}
return temp;
}
else return CString();
}
//删除所有的元素项
void CPloyNomial::RemoveAll(void)
{
while(this->m_PolyNomial.GetCount()!=0)
{
this->RemoveItem();
}
}
//把指数相同的项合并
void CPloyNomial::Format(void)
{
int i,j;
for(i=0;i<m_PolyNomial.GetCount();i++)
{
for(j=i+1;j<m_PolyNomial.GetCount();j++)
{
if(m_PolyNomial.GetAt(i)==m_PolyNomial.GetAt(j))
{
CPolyItem temp;
temp=m_PolyNomial.GetAt(i)+m_PolyNomial.GetAt(j);
this->RemovAt(i);
m_PolyNomial.InsertAt(i,temp);
this->RemovAt(j);
}
}
}
m_PolyNomial.Sort();
m_PolyNomial.Reversal();
}
//删除第iIndex项
void CPloyNomial::RemovAt(int iIndex)
{
if(this->m_PolyNomial.GetCount()!=0)
{
m_PolyNomial.RemoveAt(iIndex);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -