#include <iostream>
#include <string>
using namespace std;
/* 请在这里填写答案 */
class BigInt{
public:
string num;
BigInt()
{}
BigInt(string nu)
{num=nu;}
friend ostream& operator <<(ostream& output,BigInt&t);
friend istream& operator >>(istream& input,BigInt&t);
friend BigInt operator + (BigInt& r1,BigInt& q1);
};
void reverse(string&r);
void reverse(string&r)
{
int len=r.size();
char c;
for(int i=0;i<len/2;i++)
{
c=r[i];
r[i]=r[len-i-1];
r[len-i-1]=c;
}
}
BigInt operator + (BigInt& r1,BigInt& q1)
{
int l1,l2,i,k;
char c;
string r,q;
char add[100];
add[0]='0';
r=r1.num;//原对象不可修改
q=q1.num;
l1=r.size();
l2=q.size();
reverse(r);//将字符串倒序
reverse(q);
if(l1>l2)for(i=l2;i<l1;i++)q+="0";//为较短数字补零,方便后续加法
else for(i=l1;i<l2;i++)r+="0";//同时 i 成为串长的较大者
for(k=0;k<i;k++)
{
c=(r)[k]+(q[k]-'0');
if(c>'9')
{
c-=10;
add[k]+=(c-'0');
add[k+1]='1';//进位,同时确保最高位可进位
}
else{
add[k]+=(c-'0');
add[k+1]='0';
}
}
if(add[k]=='0')add[k]='\0';//判断最高位是否进位
else add[k+1]='\0';
string add1=string(add);
reverse(add1);
return BigInt(add1);
}
ostream& operator <<(ostream&output,BigInt&t)
{
output<<t.num;
return output;
}
istream& operator >>(istream& input,BigInt&t)
{
input>>t.num;
return input;
}
int main(){
BigInt a, b, c;
cin>>a>>b;
c=a+b;
cout<<a<<"+"<<b<<"="<<c<<endl;
return 0;
}
6-1 大整数求和(运算符重载)DeBug
最新推荐文章于 2023-11-01 18:36:19 发布