#include <vector>
#include <ostream>
#include <istream>
#include <iostream>
using namespace std;
typedef struct BigInteger {
int BASE = 100000000;
int width = 8;
vector<int> s;
BigInteger(long long num = 0)
{
*this = num;
}
BigInteger operator =(string num)
{
int len = num.length();
int head = len % width;
int times = len / width;
int digits;
for (int i = 1; i <= times; i++)
{
int start = len - i*width;
int end = start + width;
//将字符串变成整数
sscanf(num.substr(start, width).c_str(), "%08d", &digits);
s.push_back(digits);
}
;
sscanf(num.substr(0, head).c_str(), "%d", &digits);
s.push_back(digits);
return *this;
}
BigInteger operator = (long long num)
{
s.clear();
while (num)
{
int digit = num%BASE;
s.push_back(digit);
num /= BASE;
}
return *this;
}
BigInteger operator + (const BigInteger &num)
{
int jinwei = 0;
vector<int> result;
for (int i = 0;; i++)
{
if (jinwei == 0 && i >= num.s.size() && i >= s.size()) break;
int sum = jinwei;
if (i < num.s.size())
sum = sum + num.s[i];
if (i < s.size())
sum = sum + s[i];
result.push_back(sum % BASE);
jinwei = sum / BASE;
}
return (*this);
}
BigInteger operator += (const BigInteger &num)
{
*this = *this + num;//num 和*this 还得讲究位置
return (*this);
}
BigInteger operator += (long long num)
{
BigInteger tmp;
tmp = tmp + num;
return tmp;
}
bool operator > (BigInteger big_data)
{
if (s.size() != big_data.s.size())
return s.size() > big_data.s.size();
for (int i = s.size() - 1; i >= 0; i--)
{
if (s[i] != big_data.s[i])
return s[i] > big_data.s[i];
}
return false;
}
friend ostream& operator << (ostream &out, const BigInteger &data);
friend istream& operator >> (istream &in, const BigInteger &data);
} BigInteger;
ostream& operator << (ostream &out, const BigInteger &data)
{
out<< data.s.back();//头
for (int i = data.s.size() - 2; i >= 0; i--)
{
//需要将其转成成字符串形式吗?
//char buf[20];
//sprintf(buf, "%08d", data.s[i]);
//out << buf;
out << data.s[i];
}
return out;
}
istream& operator >> (istream &in, BigInteger &data)
{
string tmp;
if (!(in >> tmp)) return in;
data = tmp;
return in;
}
BigInteger data(123456789123);
cout << data;