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
Python中有一个函数叫bytes_to_long,借用这个函数的设计思想,我们可以先把这个大数用一个string类型来接收,再来进行大数运算
代码如下:
#define MAX 100
class BigInt
{
private:
string BigNum;
public:
friend istream& operator>>(istream& cin, BigInt& b);
friend ostream& operator<<(ostream& cout, BigInt& b);
BigInt(){}
BigInt(string b):BigNum(b){}
BigInt operator+(BigInt& b)
{
//bytes_to_long:
string add;
BigInt tmp;
int na[MAX] = { 0 };
int nb[MAX] = { 0 };
int sa = BigNum.size();
int sb = b.BigNum.size();
int smax = sa > sb ? sa : sb;
for (int i = 0; i < sa; i++)
{
//倒序存储:
na[sa - i - 1] = BigNum[i] - '0';
}
for (int i = 0; i < sb; i++)
{
nb[sb - i - 1] = b.BigNum[i] - '0';
}
//从个位开始计算:
for (int i = 0; i < smax; i++)
{
na[i] += nb[i];
na[i + 1] += na[i] / 10;
na[i] %= 10;
}
//去掉最高位的0:
if (!na[smax])
{
smax--;
}
//long_to_bytes,逆序输出
for (int i = smax; i >= 0; i--)
{
add += na[i] + '0';
}
tmp.BigNum = add;
return tmp;
}
};
istream& operator>>(istream& cin, BigInt& b)
{
cin >> b.BigNum;
return cin;
}
ostream& operator<<(ostream& cout, BigInt& b)
{
cout << b.BigNum;
return cout;
}