BigInt类表示不超过100位的无符号大整数。试重载>>,<<和+,以支持无符号大整数的输入、输出与求和(假设结果仍是一个不超过100位的无符号大整数)。

重载面向BigInt类对象的运算符:

>>
<<
+

裁判测试程序样例:

#include <iostream>
#include <string>
using namespace std;

/* 请在这里填写答案 */

int main(){
    BigInt a, b, c;
    cin>>a>>b;
    c=a+b;
    cout<<a<<"+"<<b<<"="<<c<<endl;
    return 0;
}

输入样例:

123456789
987654321

输出样例:

123456789+987654321=1111111110

代码

class BigInt
{
	public:
		BigInt()
		{
			a=new int[101];
			k=0;
		}
 		~BigInt()
 		{
 			delete[] a;
 		}
		void tranf();//将字符转化为数组
		 
		friend istream& operator>>(istream& is,BigInt& n);
		friend ostream& operator<<(ostream& os,BigInt& n);
		friend BigInt operator+(BigInt& a,BigInt& b);
		BigInt& operator=(const BigInt&); 
	private:
		int *a;
		string arr;
		int k;
};

BigInt& BigInt::operator=(const BigInt& b)//深拷贝
{
	if(this==&b) return *this;
	arr=b.arr;
	k=b.k;
	delete[] a;
	a=new int[k];
	for(int i=0;i<k;i++)
	{
		a[i]=b.a[i];
	}
	return *this;
}

void BigInt::tranf()
{
	int n=arr.length();
	k=n;
	
	for(int i=0;i<n;i++)
	{
		a[i]=arr[n-i-1]-'0';//将字符转化数字,将字符倒序输入到数组中
	}
	
	for(int i=n;i<101;i++)//其余位数都为0,方便后来的加法
	{
		a[i]=0;
	}
}
istream& operator>>(istream& is,BigInt& b)
{
	is>>b.arr;
	return is;
}
ostream& operator<<(ostream& os,BigInt& b)
{
	os<<b.arr;
	return os;
}
BigInt operator+(BigInt& x1,BigInt& x2)
{
	BigInt y;
	int i=0,j=0,l=0,t=0;
	x1.tranf();
	x2.tranf();
	while(i<x1.k||j<x2.k)//保证每一位都进行了加法
	{
		y.a[t]=x1.a[i++]+x2.a[j++]+l;//l是低位向高位的进位
		l=y.a[t]/10;
		y.a[t]%=10;
		t++;
	}
	while(l>0)//不要忘记较小的数加完后剩下的进位
	{
		y.a[t]+=l;
		l=y.a[t]/10;
		y.a[t]%=10;
		t++;
	}
	y.k=t;//此时的t是最高位前面的那一位
	for(i=y.k-1;i>=0;i--)
	{
		y.arr+=y.a[i]+'0';//将数字转化为字符
	}
	return y;
}