当成int直接用。
struct BigInt{
const static int mod=10000;
const static int DLEN=4;
int a[100],len; //位数4*100
BigInt()
{
ms(a),len=1;
}
BigInt(int v)
{
ms(a),len=0;
do{
a[len++]=v%mod,v/=mod;
}while(v);
}
BigInt(const char *s)//串输入ss(s)
{
ms(a);
int L=strlen(s);
len=L/DLEN;
if(L%DLEN) len++;
int index=0;
for(int i=L-1;i>=0;i-=DLEN){
int t=0,k=i-DLEN+1;
if(k<0) k=0;
repi(j,k,i) t=t*10+s[j]-'0';
a[index++]=t;
}
}
BigInt operator +(const BigInt &b)const
{
BigInt res;
res.len=max(len,b.len);
repi(i,0,res.len) res.a[i]=0;
repi(i,0,res.len-1){
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;
}
BigInt operator *(const BigInt &b)const
{
BigInt res;
repi(i,0,len-1){
int up = 0;
repi(j,0,b.len-1){
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]);
repd(i,len-2,0) printf("%04d",a[i]);
puts("");
}
};