#include<iostream>
#include"big_int.h"
using namespace std;
big_int::big_int()
{
}
big_int::big_int(int _a[],int _n)
{
for(int i=1;i<=_n;i++)
a[i]=_a[i];
n=_n;
}
big_int big_int::operator+(big_int t)
{
int p=0,q=0;
if(n>=t.n)
{
int j;
for(int i=n;i>=1;i--)
{
a[0]=0;
t.a[0]=0;
j=t.n-p;
p++;
if(j<1)
{
j=0;
}
if((a[i]+t.a[j])>=10)
{
a[i]=(a[i]+t.a[j])%10;
a[i-1]+=1;
}
else
a[i]=a[i]+t.a[j];
}
big_int m(a,n);
return m;
}
else
{
int j;
for(int i=t.n;i>=1;i--)
{
a[0]=0;
t.a[0]=0;
j=n-q;
q++;
if(j<1)
{
j=0;
}
if(a[j]+t.a[i]>=10)
{
t.a[i]=(t.a[i]+a[j])%10;
t.a[i-1]+=1;
}
else
t.a[i]=t.a[i]+a[j];
}
big_int m(t.a,t.n);
return m;
}
}
big_int big_int::operator-(big_int t)
{
int p=0,q=0/*,r=0*/;
if(n>t.n)
{
int j;
for(int i=n;i>=1;i--)
{
t.a[0]=0;
j=t.n-p;
p++;
if(j<1)
{
j=0;
}
if(-t.a[j]+a[i]<0)
{
a[i]=a[i]+10-t.a[j];
a[i-1]-=1;
}
else
a[i]=a[i]-t.a[j];
}
big_int m(a,n);
return m;
}
if(n==t.n) {
int b;
for(b=n;b>=1;b++)
{
if(a[b]==t.a[b])
continue;
else
break;
}
if(a[b-1]>t.a[b-1])
{
int j;
for(int i=n;i>=1;i--)
{
t.a[0]=0;
j=t.n-p;
p++;
if(j<1)
{
j=0;
}
if(a[i]-t.a[j]<0)
{
a[i]=a[i]+10-t.a[j];
a[i-1]-=1;
}
else
a[i]=a[i]-t.a[j];
}
big_int m(a,n);
return m;
}
else if(a[b-1]<t.a[b-1])
{
int j;
for(int i=t.n;i>=1;i--)
{
a[0]=0;
t.a[0]='-';
j=n-q;
q++;
if(j<1)
{
j=0;
}
if(-a[j]+t.a[i]<0)
{
t.a[i]=t.a[i]+10-a[j];
t.a[i-1]-=1;
}
else
t.a[i]=t.a[i]-a[j];
}
big_int m(t.a,t.n);
return m;
}
else if(a[b-1]==t.a[b-1])
{
int a[2]={0,0};
big_int m(a,1);
return m;
}
}
else if(n<t.n)
{
int j;
for(int i=t.n;i>=1;i--)
{
a[0]=0;
t.a[0]='-';
j=n-q;
q++;
if(j<1)
{
j=0;
}
if(-a[j]+t.a[i]<0)
{
t.a[i]=t.a[i]+10-a[j];
t.a[i-1]-=1;
}
else
t.a[i]=t.a[i]-a[j];
}
big_int m(t.a,t.n);
return m;
}
}
void big_int::operator*(big_int t)
{
if(n>=t.n)
{
big_int x[100];
int i;
int b[100]={0};
for(i=1;i<=t.n;i++)
{
int m,c=0;
a[0]=0;
for(int j=n;j>=0;j--)
{
b[j+1]=(a[j]*t.a[i])%10+c;
if(b[j]>=10)
{
b[j-1]+=1;
b[j]=b[j]%10;
}
c=(a[j]*t.a[i])/10;
for(m=n+1;m<=n+t.n-i;m++)
a[m]=0;
}
x[i]=big_int(b,m);
}
if(t.n==1)
{
for(int i=1;i<=x[1].n;i++)
cout<<x[1].a[i];
}
else
{
for(int j=t.n;j>1;j--)
{
x[1]=x[1]+x[j];
}
if(x[1].a[0]>0&&x[1].a[0]<=9)
{
for(int i=0;i<=x[1].n;i++)
cout<<x[1].a[i];
}
else
{
for(int i=1;i<=x[1].n;i++)
cout<<x[1].a[i];
}
}
}
else
{
big_int x[100];
int i;
int b[100]={0};
for(i=1;i<=n;i++)
{
int m,c=0;
t.a[0]=0;
for(int j=t.n;j>=0;j--)
{
b[j+1]=(t.a[j]*a[i])%10+c;
if(b[j]>=10)
{
b[j-1]+=1;
b[j]=b[j]%10;
}
c=(t.a[j]*a[i])/10;
for(m=t.n+1;m<=t.n+n-i;m++)
t.a[m]=0;
}
x[i]=big_int(b,m);
}
if(n==1)
{
for(int i=1;i<=x[1].n;i++)
cout<<x[1].a[i];
}
else
{
for(int j=n;j>1;j--)
{
x[1]=x[1]+x[j];
}
if(x[1].a[0]>0&&x[1].a[0]<=9)
{
for(int i=0;i<=x[1].n;i++)
cout<<x[1].a[i];
}
else
{
for(int i=1;i<=x[1].n;i++)
cout<<x[1].a[i];
}
}
}
}
void big_int::print()
{
if(a[0]!=1)
{
if(a[0]=='-')
{
cout<<'-';
for(int i=1;i<=n;i++)
cout<<a[i];
cout<<endl;
}
else
{
for(int i=1;i<=n;i++)
cout<<a[i];
cout<<endl;
}
}
else if(a[0]==1)
{
cout<<a[0];
for(int i=1;i<=n;i++)
cout<<a[i];
cout<<endl;
}
}
评论0