#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
const int MAXN=20;
struct bign
{
int s[MAXN],len;
bign()
{
memset(s,0,sizeof(s));
len=1;
}
bign(int num)
{
*this=num;
}
void clean()
{
while(len>1&&!s[len-1])
len--;
}
bign operator = (int num)
{
s[0]=num;
return *this;
}
bign operator + (const bign &b) const
{
bign res;
int i,j;
int x=0;
for(i=0;i<max(len,b.len)||x;i++)
{
int t=s[i]+b.s[i]+x;
x=t/10000;
res.s[i]=t%10000;
}
res.len=i;
return res;
}
bign operator * (const bign &b) const
{
bign res;
int i,j;
for(i=0;i<len;i++)
{
for(j=0;j<b.len;j++)
{
res.s[i+j]=s[i]*b.s[j];
}
}
int x=0;
for(i=0;i<=len+b.len||x;i++)
{
res.s[i]+=x;
x=res.s[i]/10000;
res.s[i]%=10000;
}
res.len=i;
res.clean();
return res;
}
bool operator < (const bign &b) const
{
if(len!=b.len)
return len<b.len;
for (int i = len-1; i >= 0; i--)
{
if(s[i]!=b.s[i])
return s[i]<b.s[i];
}
return false;
}
bool operator > (const bign &b) const
{
return b<*this;
}
};
istream& operator >> (istream &in,bign &x)
{
int num;
in>>num;
x.s[0]=num;
return in;
}
ostream& operator << (ostream &out,bign &x)
{
for(int i=x.len-1;i>=0;i--)
{
if(i<x.len-1)
{
out.fill('0');//设置填充字符
out.width(4);//设置域宽
}
out<<x.s[i];
}
return out;
}
比模拟高精度要快速些,只写了加法和乘法