实现加法(+)和乘法(*)操作
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct BigInteger{
const static int MOD = 10000;
const static int DLEN = 4;
int a[600], len;
BigInteger()
{
memset(a, 0, sizeof(a));
len = 1;
}
BigInteger(int v)
{
memset(a, 0, sizeof(a));
len = 0;
do
{
a[len++] = v%MOD;
v /= MOD;
}while(v);
}
BigInteger(const char s[])
{
memset(a, 0, sizeof(a));
int L = strlen(s);
len = L/DLEN;
if(L%DLEN) len++;
int idx = 0;
for(int i = L - 1; i >= 0; i -= DLEN)
{
int t = 0;
int k = i - DLEN + 1;
if(k < 0) k = 0;
for(int j = k;j <= i;j++)
t = t*10 + s[j] - '0';
a[idx++] = t;
}
}
BigInteger operator + (const BigInteger &b) const
{
BigInteger res;
res.len = max(len, b.len);
for(int i = 0; i <= res.len; ++i)
res.a[i] = 0;
for(int i = 0; i < res.len; ++i)
{
res.a[i] += ((i < len)?a[i]:0)+((i < b.len)?b.a[i]:0);
res.a[i+1] += res.a[i]/MOD;
res.a[i] %= MOD;
}
if(res.a[res.len] > 0)res.len++;
return res;
}
BigInteger operator * (const BigInteger &b) const
{
BigInteger res;
for(int i = 0; i < len;i++)
{
int up = 0;
for(int j = 0;j < b.len;j++)
{
int temp = a[i]*b.a[j] + res.a[i+j] + up;
res.a[i+j] = temp%MOD;
up = temp/MOD;
}
if(up != 0)
res.a[i + b.len] = up;
}
res.len = len + b.len;
while(res.a[res.len - 1] == 0 &&res.len > 1)res.len--;
return res;
}
void output()
{
printf("%d",a[len-1]);
for(int i = len-2;i >=0 ;i--)
printf("%04d",a[i]);
printf("\n");
}
};
int main()
{
char s1[] = "1012315431";
char s2[] = "1215564813";
BigInteger bi1(s1);
BigInteger bi2(s2);
BigInteger bi3 = bi1 + bi2;
bi3.output();
return 0;
}