测试进位,对的。
99999999999999999999999999999999999999999999999999999999999 999999999
100000000000000000000000000000000000000000000000000999999998
100000000000000000000000000000000000000000000000000999999998
100000000000000000000000000000000000000000000000000999999998
1999999999
1999999999
2000000000
你贴文字吧。这样帮你的人不需要手工输入已有的代码和测试数据,节省时间。
我还是手工敲了。代买调试通过了。如下:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAXLEN = 210;
class ChugeInt
{
public:
ChugeInt(const string& s): digits(s)
{
reverse(digits.begin(), digits.end());
digits.reserve(MAXLEN);
}
ChugeInt(int n):digits("0")
{
digits.reserve(MAXLEN);
if (n > 0)
{
digits.resize(0);
while (n > 0)
{
digits.append(1, n % 10 + '0');
n /= 10;
}
}
}
ChugeInt& operator++()
{
int carry = 1;
for (int i = 0; carry > 0 && i < digits.length(); ++i)
{
int d = (digits[i] - '0') + carry;
carry = d / 10;
d -= carry * 10;
digits[i] = d + '0';
}
if (carry > 0)
{
digits.append(1, carry + '0');
}
return *this;
}
ChugeInt operator++(int)
{
ChugeInt temp(*this);
int carry = 1;
for (int i = 0; carry > 0 && i < digits.length(); ++i)
{
int d = (digits[i] - '0') + carry;
carry = d / 10;
d -= carry * 10;
digits[i] = d + '0';
}
if (carry > 0)
{
digits.append(1, carry + '0');
}
return temp;
}
ChugeInt& operator+=(const ChugeInt& rhs)
{
if (digits.length() < rhs.digits.length())
{
digits.resize(rhs.digits.length(), '0');
}
int carry = 0;
int i = 0;
for (; i < rhs.digits.length(); ++i)
{
int d = (digits[i] - '0') + (rhs.digits[i] - '0') + carry;
carry = d / 10;
d -= carry * 10;
digits[i] = d + '0';
}
for (; carry > 0 && i < digits.length(); ++i)
{
int d = (digits[i] - '0') + carry;
carry = d / 10;
d -= carry * 10;
digits[i] = d + '0';
}
if (carry > 0)
{
digits.append(1, carry + '0');
}
return *this;
}
friend ChugeInt operator+(const ChugeInt& lhs, const ChugeInt& rhs)
{
ChugeInt result(lhs);
result += rhs;
return result;
}
friend ostream& operator<<(ostream& os, const ChugeInt& hi)
{
string s(hi.digits);
reverse(s.begin(), s.end());
os << s;
return os;
}
private:
string digits; // big ending digits of the huge integer.
};
int main()
{
char s[MAXLEN];
int n;
while (cin >> s >> n)
{
ChugeInt a(s);
ChugeInt b(n);
cout << a + b << endl;
cout << n + a << endl;
cout << a + n << endl;
b += n;
cout << ++b << endl;
cout << b++ << endl;
cout << b << endl;
}
return 0;
}
// Output
999999999988888888881234567890123456789 12
999999999988888888881234567890123456801
999999999988888888881234567890123456801
999999999988888888881234567890123456801
25
25
26
6 6
12
12
12
13
13
14