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

📄 long.h

📁 这是一个支持多位数运算(可以达到几百位的长整数)的数类
💻 H
📖 第 1 页 / 共 2 页
字号:
			}
			dxy[sdxy-i-1]=char(j+47);
		}
		if((kx==0&&ky==0)||(kx!=0&&ky!=0))
			dxy[sdxy]='\0';
		else
		{
			dxy[sdxy]='-';
			dxy[sdxy+1]='\0';
		}
	}
	delete []absx;
	delete []absy;
	return dxy;
}

//______________________________________________________初始化构造函数
Long::Long(char *a)
{
	char * t=upsidedown(a);
	int k=check(t);
	if(k==0)
	{
		cout<<"wrong initial!初始化错误!";
		exit(1);
	}
	else
	{
		num=new char[strlen(t)+1];
		if(num)
			strcpy(num,t);
	}
	delete []t;
};
Long::Long(long int a)
{
	int k=0,sa;
	if(a<0)
	{
		k=1;
		a*=(-1);
	}
	if(a!=0)
		sa=int(log10(a))+1;//__________________a的位数
	else
		sa=1;
	if(k==0)
	{
		num=new char[sa+1];
		num[sa]='\0';
	}
	else
	{
		num=new char[sa+2];
		num[sa]='-';
		num[sa+1]='\0';
	}
	for(int i=0;i<sa;i++)
	{
		num[i]=char(a%10+48);
		a=(a-a%10)/10;
	}
}
//________________________________________________析构函数
Long::~Long()
{

	num[0]='\0';
	delete []num;
};
//________________________________________________拷贝函数
Long::Long(Long &sour)
{
	num=new char[strlen(sour.num)+1];
	strcpy(num,sour.num);
}
//________________________________________________输入函数
void Long::input()
{
A:  char *a=new char[800];
	//cin.getline(a,300,'\n');
	cin>>a;
	char *t=upsidedown(a);
	int k=check(t);
	if(k==0)
	{
		cout<<"wrong input!please input again:";
		delete []a;
		goto A;
	}
	else
	{
		num=upsidedown(a);
		delete []t;
		delete []a;
	}
};
//________________________________________________输出函数
void Long::output(ostream &out)
{
	char * t=upsidedown(num);
	out<<t;
	delete t;
};
//_________________________________________________输入输出流重载
istream & operator >>(istream & in,Long & shu)
{
	shu.input();
	return in;
};

ostream & operator <<(ostream & out,Long & shu)
{
	shu.output(out);
	return out;
};
//________________________________________________运算符重载部分

Long operator +(Long &x,Long &y)//________+号重载
{
	Long axy;
	axy.num=add(x.num,y.num);
	return axy;
}
Long operator +(Long &x,long y)
{
	Long axy;
	axy.num=add(x.num,Long(y).num);
	return axy;
}
Long operator +(long y,Long &x)
{
	Long axy;
	axy.num=add(x.num,Long(y).num);
	return axy;
}
Long operator -(Long &x,Long &y)//________-号重载
{
	Long sxy;
	sxy.num=subtract(x.num,y.num);
	return sxy;
}
Long operator -(Long &x,long y)
{
	Long sxy;
	sxy.num=subtract(x.num,Long(y).num);
	return sxy;
}
Long operator -(long y,Long &x)
{
	Long sxy;
	sxy.num=subtract(Long(y).num,x.num);
	return sxy;
}
Long operator *(Long &x,Long &y)//__________*号重载
{
	Long mxy;
	mxy.num=multiply(x.num,y.num);
	return mxy;
}
Long operator *(Long &x,long y)
{
	Long mxy;
	mxy.num=multiply(x.num,Long(y).num);
	return mxy;
}
Long operator *(long y,Long &x)
{
	Long mxy;
	mxy.num=multiply(x.num,Long(y).num);
	return mxy;
}
Long operator /(Long &x,Long &y)//______________/号重载
{
	Long dxy;
	dxy.num=divid(x.num,y.num);
	return dxy;
}
Long operator /(Long &x,long y)
{
	Long dxy;
	dxy.num=divid(x.num,Long(y).num);
	return dxy;
}
Long operator /(long y,Long &x)
{
	Long dxy;
	dxy.num=divid(Long(y).num,x.num);
	return dxy;
}
Long operator %(Long &x,Long &y)//___________取模运算重载
{
	Long mxy;
	mxy.num=subtract(x.num,multiply(y.num,divid(x.num,y.num)));
	return mxy;
}
Long operator %(Long &x,long y)
{
	Long mxy;
	mxy.num=subtract(x.num,multiply(Long(y).num,divid(x.num,Long(y).num)));
	return mxy;
}
Long operator %(long x,Long &y)
{
	Long mxy;
	mxy.num=subtract(Long(x).num,multiply(y.num,divid(Long(x).num,y.num)));
	return mxy;
}

//_________________________________________________逻辑运算符重载
int operator >(Long &x,Long &y)
{
	if(judge(x.num,y.num)>0)
		return 1;
	else
		return 0;
};
int operator >(Long &x,long int y)
{
	if(judge(x.num,Long(y).num)>0)
		return 1;
	else
		return 0;
};
int operator >(long int x,Long &y)
{
	if(judge(Long(x).num,y.num)>0)
		return 1;
	else
		return 0;
};
int operator >=(Long &x,Long &y)
{
	if(judge(x.num,y.num)>=0)
		return 1;
	else
		return 0;
};
int operator >=(Long &x,long int y)
{
	if(judge(x.num,Long(y).num)>=0)
		return 1;
	else
		return 0;
};
int operator >=(long int x,Long &y)
{
	if(judge(Long(x).num,y.num)>=0)
		return 1;
	else
		return 0;
};
int operator <(Long &x,Long &y)
{
	if(judge(y.num,x.num)>0)
		return 1;
	else
		return 0;
};
int operator <(Long &x,long int y)
{
	if(judge(Long(y).num,x.num)>0)
		return 1;
	else
		return 0;
};
int operator <(long int x,Long &y)
{
	if(judge(y.num,Long(x).num)>0)
		return 1;
	else
		return 0;
};
int operator <=(Long &x,Long &y)
{
	if(judge(y.num,x.num)>=0)
		return 1;
	else
		return 0;
};
int operator <=(Long &x,long int y)
{
	if(judge(Long(y).num,x.num)>=0)
		return 1;
	else
		return 0;
};
int operator <=(long int x,Long &y)
{
	if(judge(y.num,Long(x).num)>=0)
		return 1;
	else
		return 0;
};
int operator ==(Long &x,Long &y)
{
	if(judge(y.num,x.num)==0)
		return 1;
	else
		return 0;
};
int operator ==(Long &x,long int y)
{
	if(judge(Long(y).num,x.num)==0)
		return 1;
	else
		return 0;
};
int operator ==(long int x,Long &y)
{
	if(judge(y.num,Long(x).num)==0)
		return 1;
	else
		return 0;
};
int operator !=(Long &x,Long &y)
{
	if(judge(y.num,x.num)==0)
		return 0;
	else
		return 1;
};
int operator !=(Long &x,long int y)
{
	if(judge(Long(y).num,x.num)==0)
		return 0;
	else
		return 1;
};
int operator !=(long int x,Long &y)
{
	if(judge(y.num,Long(x).num)==0)
		return 0;
	else
		return 1;
};
int operator !(Long &x)
{
	if(judge(x.num,"0")!=0)
		return 0;
	else
		return 1;
};
int operator ||(Long &x,Long &y)
{
	if(judge(x.num,"0")!=0||judge(y.num,"0")!=0)
		return 1;
	else
		return 0;
}
int operator ||(Long &x,int y)
{
	if(judge(x.num,"0")!=0||judge(Long(y).num,"0")!=0)
		return 1;
	else
		return 0;
}
int operator ||(int x,Long &y)
{
	if(judge(Long(x).num,"0")!=0||judge(y.num,"0")!=0)
		return 1;
	else
		return 0;
}
int operator &&(Long &x,Long &y)
{
	if(judge(x.num,"0")!=0&&judge(y.num,"0")!=0)
		return 1;
	else
		return 0;
}
int operator &&(Long &x,int y)
{
	if(judge(x.num,"0")!=0&&judge(Long(y).num,"0")!=0)
		return 1;
	else
		return 0;
}
int operator &&(int x,Long &y)
{
	if(judge(Long(x).num,"0")!=0&&judge(y.num,"0")!=0)
		return 1;
	else
		return 0;
}
///////////////////////////////////////
    Long & Long::operator =(Long & a)//_______________赋值重载函数
	{
		num=new char[strlen(a.num)+1];
		strcpy(num,a.num);
		return *this;
	}
	Long & Long::operator =(char * a)
	{
		char *t=upsidedown(a);
		int k=check(t);
		if(k==0)
		{
			cout<<"wrong initial!";
			delete []t;
		} 
		else
		{
			num=new char[strlen(t)+1];
			if(num)
				strcpy(num,t);
			delete []t;
		}
		return *this;
	}
	Long & Long::operator =(long int a)
	{
		int k=0,sa;
		if(a<0)
		{
			k=1;
			a*=(-1);
		}
		if(a!=0)
			sa=int(log10(a))+1;//____________a的位数
		else
			sa=1;
		if(k==0)
		{
			num=new char[sa+1];
			num[sa]='\0';
		}
		else
		{
			num=new char[sa+2];
			num[sa]='-';
			num[sa+1]='\0';
		}
		for(int i=0;i<sa;i++)
		{
			num[i]=char(a%10+48);
			a=(a-a%10)/10;
		}
		return *this;
	}
	Long & Long::operator *=(Long &a)
	{
		char * temp=num;
		num=multiply(temp,a.num);
		delete []temp;
		return *this;
	}
	Long & Long::operator *=(long int a)
	{
		char * temp=num;
		num=multiply(temp,Long(a).num);
		delete []temp;
		return *this;
	}
	Long & Long::operator +=(Long &a)
	{
		char *temp=num;
		num=add(temp,a.num);
		delete []temp;
		return *this;
	}
	Long & Long::operator +=(long int a)
	{
		char *temp=num;
		num=add(temp,Long(a).num);
		delete []temp;
		return *this;
	}
	Long & Long::operator -=(Long &a)
	{
		char *temp=num;
		num=subtract(temp,a.num);
		delete []temp;
		return *this;
	}
	Long & Long::operator -=(long int a)
	{
		char *temp=num;
		num=subtract(temp,Long(a).num);
		delete []temp;
		return *this;
	}
	Long & Long::operator /=(Long &a)
	{
		char *temp=num;
		num=divid(temp,a.num);
		delete []temp;
		return *this;
	}
	Long & Long::operator /=(long int a)
	{
		char *temp=num;
		num=divid(temp,Long(a).num);
		delete []temp;
		return *this;
	}
	Long & Long::operator %=(Long &a)
	{
		char *temp=num;
		num=subtract(temp,multiply(a.num,divid(temp,a.num)));
		delete []temp;
		return *this;
	}
	Long & Long::operator %=(long int a)
	{
		char *temp=num;
		num=subtract(temp,multiply(Long(a).num,divid(temp,Long(a).num)));
		delete []temp;
		return *this;
	}
	Long & Long::operator ++()
	{
		char *temp=num;
		num=add(temp,"1");
		delete []temp;
		return *this;
	}
	Long  Long::operator ++(int)
	{
		Long temp;
		temp.num=num;
		num=add(num,"1");
		return temp;
	}
	Long & Long::operator --()
	{
		char *temp=num;
		num=subtract(temp,"1");
		delete []temp;
		return *this;
	}
	Long  Long::operator --(int)
	{
		Long temp;
		temp.num=num;
		num=subtract(num,"1");
		return temp;
	}
	Long  Long::operator  -()
	{
		return (-1)*(*this);
	}
//////////////////////////////////////////////////
#endif
//________________________________________________测试部分(主函数)
/*void main()
{
	Long a,b,c,d,e,f,g,h,i;
	while(1)
	{
	cout<<"a=";
	cin>>a;
	cout<<"b=";
	cin>>b;
	c=a+b;
	d=a-b;
	e=a*b;
	f=a/b;
	g=a%b;
	h=max(a,b);
	i=Labs(a);
	cout<<"\na+b="<<c<<endl;
	cout<<"a-b="<<d<<endl;
	cout<<"a*b="<<e<<endl;	
	cout<<"a/b="<<f<<endl;
	cout<<"a%b="<<g<<endl;
	cout<<"a++="<<a++<<endl;
	cout<<"++a="<<++a<<endl;
	cout<<"max(a,b)="<<h<<endl;
	cout<<"Labs(a)="<<i<<endl;
	cout<<"-a="<<-a<<endl;
	if(a>10000000)
		cout<<"It's to big!\n"<<endl;
	}
}*/

⌨️ 快捷键说明

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