📄 重载+.cpp
字号:
#include"head.h"
//-----------------------巨型整数+巨型整数------------------------//
HugeInt operator+(const HugeInt &a,const HugeInt &b){ //巨型整数a+巨型整数b 结果保存在a中
HugeInt h,h1,h2;
h1=a; h2=b;
int i,flag=0;
if(h1>=h && h2<=h){ //当a>=0 , b<=0 的情况
h2=-h2;
return h=(h1-h2);
}
if(h1<h && h2>h){ //当a<0,b>0 的情况
h1=-h1;
return h=h2-h1;
}
if(h1<h && h2<h){ //当a<0,b<0的情况
flag=1;
h1=-h1; h2=-h2;
}
//-----------------------默认a,b都>=0执行下列程序-----------------------//
for( i=1; i<=h2.huge_t[0] ; ++i){
h1.huge_t[i]+=h2.huge_t[i];
if(h1.huge_t[i]>=Depth){
h1.huge_t[i]-=Depth; //对应两个数相加,如果超过进制数就向前进一位
h1.huge_t[i+1]++;
}
}
if(h2.huge_t[0]>=h1.huge_t[0]){
if( h1.huge_t[ h2.huge_t[0]+1 ]>0 )
h2.huge_t[0]++; //整数b的进制位数比a位数大,把b的进制位数赋给a
h1.huge_t[0]=h2.huge_t[0];
}
else
for(; h1.huge_t[i]>=Depth && i<h1.huge_t[0] ; ){ //当a的进制位数比b大
h1.huge_t[i]-=Depth;
i++;
h1.huge_t[i]++;
if(h1.huge_t[ h1.huge_t[0] ]>=Depth){ //最高位超过进制数
h1.huge_t[h1.huge_t[0] ]-=Depth;
h1.huge_t[0]++; //位数加一
h1.huge_t[ h1.huge_t[0] ]++;
break;
}
}
if(flag==1) return -h1; //如果a,b都是复数,先置成整数,计算后结果要取负
return h1;
}
//--------------------巨型整数加长整型数--------------------------//
HugeInt operator+(const HugeInt &h,const long &n){
HugeInt h1,h2;
h1.long_to_huge(n,h1);
return h2=h1+h;
}
//-------------------巨型整数+字符串--------------------------//
HugeInt operator+(const HugeInt &h,const char *buf){
HugeInt h1,h2;
char str[MAX*Digit + 1];
strcpy(str,buf);
h1.str_to_huge(str,h1); //字符串转化成巨型整数
return h2=h+h1;
}
//-------------------字符串+巨型整数--------------------------//
HugeInt operator+(const char *buf,const HugeInt &h){
HugeInt h1,h2;
char str[MAX*Digit + 1];
strcpy(str,buf);
h1.str_to_huge(str,h1); //字符串转化成巨型整数
return h2=h+h1;
}
//-----------------长整型+巨型整数----------------------------//
HugeInt operator+(const long &n,const HugeInt &h){
HugeInt h1,h2;
h1.long_to_huge(n,h1);
return h2=h1+h;
}
//-----------------前置运算 ++HugeInt-----------------------//
HugeInt HugeInt::operator++(){
HugeInt result;
result=*this+1L;
return (*this=result);
}
//---------------后置运算 HugeInt++ -----------------------//
HugeInt HugeInt::operator++(int nosue){
HugeInt temp=*this;
HugeInt result;
result=*this+1L;
*this=result;
return temp;
}
HugeInt HugeInt::operator+=(const HugeInt &h){
*this=*this+h;
return *this;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -