#define r register int // register关键字将变量存储在CPU寄存器中,可以提高效率
struct BigInteger
{
char str[100001]; // str数组用于存储字符串
int num[100001], len; // num数组为str数组转为int类型的结果,len为str的长度,也就是num的大小
inline void output()
{ // 输出函数,由于是反向模拟加法的,所以也需要反向输出
for (r i = len - 1; i + 1; --i)
printf("%d", num[i]);
}
BigInteger operator+(BigInteger &k)
{ // 开始重载了,加法竖式模拟也不需要多解释
len = max(len, k.len);
r f = 0;
for (r i = 0; i ^ len; ++i)
{
num[i] += k.num[i] + f;
if (num[i] > 9)
num[i] -= 10, f = 1;
else
f = 0;
}
if (f)
num[len++] = 1; // 这里是对进位的处理
return *this; //*this返回一个指向类本身的指针
}
BigInteger()
{ // 初始化,清零所有变量和数组
len = 0;
memset(str, 0, sizeof str);
memset(num, 0, sizeof num);
}
BigInteger(int k)
{ // 将BigInteger类型赋为int类型,也可当做强制转换使用
memset(str, 0, sizeof str);
sprintf(str, "%d", k); // sprintf与printf类似,可以当做将数值打印到字符串中,具体用法请自行度娘(笑)
len = strlen(str); // 保存字符串长度
std::reverse(str, str + len); // 由于需要反向模拟竖式,所以我们在这里就调用STL的reverse函数将str字符串倒过来
for (r i = 0; i ^ len; ++i)
num[i] = str[i] - 48; // 将字符串转为int类型
}
};