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

📄 long.h

📁 RSA算法的VC实现
💻 H
📖 第 1 页 / 共 2 页
字号:
	delete []t;
};
Long::Long(const  int a)//long//这里解决了一个大问题,编译系统只人0作为int,而不是long int
{
	int k=0,sa;
    long int b=a;
	if(a<0)
	{
		k=1;
		b=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(b%10+48);
		b=(b-b%10)/10;
	}
}
//________________________________________________析构函数
Long::~Long()
{

	//num[0]='\0';
	delete []num;
};
//________________________________________________拷贝函数
Long::Long(const Long &sour)
{
	//delete []num;//我加的;
	num=new char[strlen(sour.num)+1];
	if(!num){cerr<<"Allocation Error \n";exit(1);}
	strcpy(num,sour.num);
}
//________________________________________________输入函数
void Long::input()
{

};
//________________________________________________输出函数
void Long::output(ostream &out)
{

};
//_________________________________________________输入输出流重载
istream & operator >>(istream & in,Long & shu)
{
A:  char *a=new char[800];
	//cin.getline(a,300,'\n');
	in>>a;//我自己修改如下:
	/*int i=0;
	cin.get(a[i]);
	while(a[i]==32||a[i]==13||a[i]==10)//32 represent space;
	cin.get(a[i]);
	cin.get(a[++i]);
	while(a[i]!=32&&a[i]!=13&&a[i]!=10)//||粘贴就会出现这样的错误;
		cin.get(a[++i]);
	a[i]='\0';*/
	char *t=upsidedown(a);
	int k=check(t);
	if(k==0)
	{
		cout<<"wrong input!please input again:";
		delete []a;
		goto A;
	}
	else
	{
		shu.num=upsidedown(a);
		delete []t;
		delete []a;
	}
	//shu.input();
	return in;
};

ostream & operator <<(ostream & out,Long & shu)
{
	char * t=upsidedown(shu.num);
	out<<t;
	delete t;
	//shu.output(out);
	return out;
};
void Long::to_Binary(char* str){//长整数转换成二进制;
	int i=0;
	char c;
	Long l=*this;
	//cout<<l<<endl;
	while(l!=0)
	{
		Long r=l%2;
		l=l/2;
		if(r==1)
			str[i++]='1';
		else str[i++]='0';
	}
	str[i]='\0';
	int len=strlen(str);
	//cout<<len<<endl;
	for(i=0;i<len/2;i++)
	{
		c=str[i];
		str[i]=str[len-i-1];
		str[len-i-1]=c;
	}
}
long int Long::Long_to_long(){//转换为普通长整数;
	long int base=1;
	int l=strlen(num);
	int i;
	long int result=0;
	if(num[l-1]=='-'){
		result=0;//负数暂且不考虑;
	}
	else
	{
		for(i=0;i<l;i++)
		{
			result=(num[i]-'0')*base+result;
			base=base*10;
		}
	}
	return result;
}
int Long::Odd(){//判断是否为奇数.针对正整数;
	switch(num[0])
	{
	case '1':return 1;break;
	case '2':return 0;break;
	case '3':return 1;break;
	case '4':return 0;break;
	case '5':return 1;break;
	case '6':return 0;break;
	case '7':return 1;break;
	case '8':return 0;break;
	case '9':return 1;break;
	//case '0':return 0;break;
	default: return 0;break;
	}
}
//________________________________________________运算符重载部分

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 + -