⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quantic.cpp

📁 数据结构中的多项式相加问题
💻 CPP
字号:
// Quantic.cpp: implementation of the CQuantic class.
//
//////////////////////////////////////////////////////////////////////

#include "Quantic.h"
#include "string.h"
#include "math.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CQuantic::CQuantic()
{
	m_strName=NULL;
}
CQuantic::CQuantic(CQuantic & Quantic)
{
    if(Quantic.m_strName)
	{
		m_strName=new char[strlen(Quantic.m_strName)+1];
		strcpy(m_strName,Quantic.m_strName);
	}
	int length=Quantic.m_clList.GetLength();
	ELEMENT element;
	for(int i=0;i<length;i++)
	{
		element=Quantic.m_clList[i];
		m_clList.Add(element);
	}
}
CQuantic::~CQuantic()
{
	delete [] m_strName;
}
bool CQuantic::SetName(char strName[])
{
	delete [] m_strName;
    m_strName=new char[strlen(strName)+1];
	strcpy(m_strName,strName);
	return true;
}

void CQuantic::GetName(char strName[])
{
    strcpy(strName,m_strName);
}

bool CQuantic::IsEqual(char strName[])
{
	int equal;
	equal=strcmp(strName,m_strName);
	return equal==0 ? true : false;
}

bool CQuantic::AddElement(int Modulus,int Power)
{
    ELEMENT element;
	element.Modulus=Modulus;
	element.Power=Power;
	if(Modulus==0)
		return false;
	int length=m_clList.GetLength();
	for(int i=0;i<length;i++)
	{
		if(m_clList[i].Power==Power)
		{
			m_clList[i].Modulus+=Modulus;
			if(!m_clList[i].Modulus)
				m_clList.Delete(i);
			return true;
		}
		if(m_clList[i].Power<Power)
		{
            if(element.Modulus)
			    m_clList.Insert(i,element);
			return true;
		}
	}
	if(element.Modulus)
	    m_clList.Add(element);
	return true;
}

bool CQuantic::AddQuantic(CQuantic & quantic,int modulus)
{
	ELEMENT element;
	int length=quantic.m_clList.GetLength();
	for(int i=0;i<length;i++)
	{
		element=quantic.m_clList[i];
		if(element.Modulus * modulus==0)
			continue;
        AddElement(element.Modulus * modulus,element.Power);
	}
	return true;
}

bool CQuantic::AddString(char String[])
{

	if(Check(String))
	{
		int sign;
		int value;
		int power;
        int i=0;
	    while(String[i])
		{
			sign=1;
			if(String[i]=='+'||String[i]=='-')//符号
			{
				sign=String[i]=='-'? -1 : 1; 
				i++;
			}
			if(String[i]>='0'&&String[i]<='9')
			    value=0;
			else
				value=1;
			while(String[i]>='0'&&String[i]<='9')//数字
			{
                value=value*10+String[i]-'0';
			    i++;
			}
			value=value*sign;

			power=0;
			sign=1;
			if(String[i]=='x'||String[i]=='X')//x
			{
				i++;
				if(String[i]=='^')//^
				{
					i++;
					if(String[i]=='+'||String[i]=='-')//符号
					{
			            sign=String[i]=='-'? -1 : 1; 
			            i++;
					}
				}
				
				if(String[i]>='0'&&String[i]<='9')
			        power=0;
				else
					power=1;
			    while(String[i]>='0'&&String[i]<='9')//数字
				{
                    power=power*10+String[i]-'0';
			        i++;
				}
			}
		    power=power*sign; 
            if(value)
			    AddElement(value,power);
		}
		return true;
	}
	return false;
}
bool CQuantic::DeleteQuantic()
{
	m_clList.DestroyList();
	delete [] m_strName;
	return true;
}
double CQuantic::Calculate(double X)
{
	double value=0;
	ELEMENT element;
	int length=m_clList.GetLength();
	for(int i=0;i<length;i++)
	{
		element=m_clList[i];
        value=value+pow(X,element.Power)*element.Modulus;
	}
	return value;
}
void CQuantic::Display()
{
    ELEMENT element;
	bool flag=false;
	int length=m_clList.GetLength();
	if(m_strName)
		cout<<m_strName<<": ";
	for(int i=0;i<length;i++)
	{
		element=m_clList[i];
		if(element.Modulus>0 && flag)
			cout<<'+';
		flag=true;
		if(element.Power==0)
            cout<<element.Modulus;
		else if(element.Modulus==1 && element.Power==1)
			cout<<'X';
		else if(element.Power==1)
			cout<<element.Modulus<<"X";
		else if(element.Modulus==1)
            cout<<"X^"<<element.Power;
		else
			cout<<element.Modulus<<"X^"<<element.Power;
	}
	cout<<endl;
}
bool CQuantic::Check(char String[])
{
	int i=0;
	while(String[i])
	{
		while(String[i]>='0'&&String[i]<='9')//数字
			i++;
		if(String[i]=='x'||String[i]=='X')//x
		{
			i++;
			if(String[i]=='^')//^
			{
				i++;
				if(String[i]=='+'||String[i]=='-')//符号
		            i++;
				if(String[i]<'0'||String[i]>'9')//必须是数字符
					return false;
			}
			while(String[i]>='0'&&String[i]<='9')//数字
			    i++;
		}
		if(String[i]=='+'||String[i]=='-')
		{
			i++;
			if(String[i]=='+'||String[i]=='-')
				return false;
			continue;
		}
		if(!String[i])
			return true;
		return false;
	}
	if(String[i-1] == '+' || String[i-1] == '-')
		return false;
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -