#include <bits/stdc++.h>
using namespace std;
struct bigint
{
static const int N=1000001;
static const int BASE=100000;
static const int WIDTH=5;
typedef int used_type;
used_type a[N];
int len;
bool sgn;
void setlen()
{
if(a[len+1])len++;
while(len>1 && a[len]==0) --len;
}
bigint()
{
memset(a,0,sizeof(a[0])*N);
len=1;sgn=1;
}
~bigint()
{
//没有屁用233
}
bigint(const int n)
{
*this=n;
}
bigint(const char*n)
{
*this=n;
}
bigint(used_type *a_,int len_,int sgn_)
{
memcpy(a,(const void*)a_,N*sizeof(a[0]));
len=len_;
sgn=sgn_;
}
bigint& operator=(const bigint &b)
{
if(this!=&b)
{
memcpy(a,(const void*)b.a,N*sizeof(a[0]));
len=b.len;
sgn=b.sgn;
}
return *this;
}
bigint& operator=(const char*aa)
{
memset(a,0,sizeof(a[0])*N);
if(aa[0]=='-') sgn=0,++aa;
else sgn=1;
len=0;
int lenaa=strlen(aa);
for(int j=lenaa-1;j>=0;j-=WIDTH)
{
int i=j-WIDTH+1;
if(i<0) i=0;
int buf=0;
for(int k=i;k<=j;k++)
{
buf*=10;
buf+=aa[k]-'0';
}
a[++len]=buf;
}
return *this;
}
bigint& operator=(const int &b)
{
char buf[25];
sprintf(buf,"%d",b);
return *this=buf;
}
bigint& operator + ()
{
return *this;
}
bigint operator - ()
{
return bigint(this->a,this->len,!this->sgn);
}
friend bool operator < (const bigint &a,const bigint &b)
{
if(a.len!=b.len) return a.len<b.len;
else
for(int i=a.len;i>0;i--)
{
if(a.a[i]!=b.a[i]) return a.a[i]<b.a[i];
}
return 0;
}
friend bool operator == (const bigint &a,const bigint &b)
{
return a.len==b.len && a.sgn==b.sgn && memcmp(a.a,b.a,N*sizeof(used_type))==0;
}
friend bool operator > (const bigint &a,const bigint &b){return b<a;}
friend bool operator >= (const bigint &a,const bigint &b){return !(a<b);}
friend bool operator <= (const bigint &a,const bigint &b){return !(a>b);}
friend bool operator != (const bigint &a,const bigint &b){return !(a==b);}
friend bigint operator+(const bigint &a,const bigint &b)
{
if(a.sgn==0)
{
if(b.sgn==0) return -((-(bigint)a)+(-(bigint)b));
else return b-(-(bigint)a);
}
else if(b.sgn==0) return a-(-(bigint)b);
bigint c;
c.len=max(a.len,b.len);
for(int i=1;i<=c.len;i++)
{
c.a[i]+=a.a[i]+b.a[i];
c.a[i+1]+=c.a[i]/BASE;
c.a[i]%=BASE;
}
if(c.a[c.len+1]) c.len++;
return c;
}
bigint& operator +=(const bigint &a)
{
return *this=*this+a;
}
bigint& operator ++()
{
return *this=*this+1;
}
bigint operator ++(int)
{
bigint c=*this;
*this=*this+1;
return c;
}
friend bigint operator-(const bigint &a,const bigint &b)
{
if(a.sgn==0)
{
if(b.sgn==0) return (-(bigint)b)-(-(bigint)a);
else return -((-(bigint)a)+b);
}
else if(b.sgn==0) return (a+(-(bigint)b));
if(a<b) return -(b-a);
bigint c;
for(int i=1;i<=c.len;i++)
{
c.a[i]+=a.a[i]-b.a[i];
if(c.a[i]<0)
{
c.a[i]+=BASE;
c.a[i+1]--;
}
}
c.setlen();
return c;
}
bigint& operator -=(const bigint &a)
{
return *this=*this-a;
}
bigint& operator --()
{
return *this=*this-1;
}
bigint operator --(int)
{
bigint c=*this;
*this=*this-1;
return c;
}
friend bigint operator * (const bigint &a,const bigint &b)
{
bigint c;
c.sgn=(a.sgn==b.sgn);
c.len=(a.len+b.len);
for(int i=1;i<=a.len;i++)
{
for(int j=1;j<=b.len;j++)
{
long long x=c.a[i+j-1];
x+=(long long)a.a[i]*b.a[j];
c.a[i+j-1]=x%BASE;
c.a[i+j]+=int(x/BASE);
}
}
if(c.a[c.len+1]>0) c.len++;
while(c.len>1 && c.a[c.len]==0) c.len--;
return c;
}
bigint& operator *=(const bigint &a)
{
return *this=*this*a;
}
void input()
{
char *s=new char[N+10];
scanf("%[+-0123456789]",s);
*this=s;
delete[] s;
}
void output()
{
if(!sgn) printf("-");
char sbuf[6]="";
sprintf(sbuf,"%c%d%d%c",'%',0,WIDTH,'d');
for(int i=len;i;i--)
{
if(i!=len) printf(sbuf,a[i]);
else printf("%d",a[i]);
}
}
friend istream& operator >> (istream &in,bigint &b)
{
if(!in) return in;
string str;
in>>str;
b=str.c_str();
return in;
}
friend ostream& operator << (ostream &out,const bigint &b)
{
if(!b.sgn) out<<"-";
for(int i=b.len;i;i--)
{
if(i!=b.len)
out<<setw(WIDTH)<<setfill('0')<<(int)b.a[i];
else out<<b.a[i];
}
return out;
}
};
bigint chuyi2(bigint a)
{
for(int i=a.len;i>0;--i)
{
if(a.a[i]<2)
{
a.a[i-1]+=a.a[i]%2*10;
a.a[i]=0;
}
else
if(i==1)
{
a.a[1]/=2;
}
else
{
a.a[i-1]+=a.a[i]%2*10;
a.a[i]/=2;
}
}
a.setlen();
return a;
}
int main()
{
bigint a,b;
cin>>a>>b;
cout<<a*b<<endl;
return 0;
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 3 s | 14 MB + 312 KB | Time Limit Exceeded | Score: 0 | 显示更多 |