📄 long.h
字号:
}
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 + -