struct bigint
{
vector<int> val;
bigint()
{
this->val.clear();
}
bigint(int x)
{
(*this)=bigint();
this->val.push_back(x);
while(this->val.back()>=10)
{
int t=this->val.back()/10;
this->val.back()%=10;
this->val.push_back(t);
}
}
};
bigint operator+(bigint x,bigint y)
{
bigint res;
int lx=x.val.size(),ly=y.val.size(),len=max(lx,ly);
for(int i=0;i<len;i++)
{
int t;
if(i>=lx)
t=y.val[i];
else if(i>=ly)
t=x.val[i];
else
t=x.val[i]+y.val[i];
res.val.push_back(t);
}
for(int i=0;i<len;i++)
{
int t=res.val[i]/10;
res.val[i]%=10;
if(i+1>=len)
res.val.push_back(t),len++;
else
res.val[i+1]+=t;
}
while(res.val.back()==0)
res.val.pop_back();
return res;
}
bigint operator*(bigint x,int y)
{
bigint res;
int len=x.val.size();
for(int i=0;i<len;i++)
res.val.push_back(x.val[i]*y);
for(int i=0;i<len;i++)
{
int t=res.val[i]/10;
res.val[i]%=10;
if(i+1>=len)
res.val.push_back(t),len++;
else
res.val[i+1]+=t;
}
while(res.val.back()==0)
res.val.pop_back();
return res;
}
istream &operator>>(istream &_is,bigint &_num)
{
string tmp;
_is>>tmp;
int len=tmp.length();
_num=bigint();
for(int i=len-1;i>=0;i--)
_num.val.push_back(tmp[i]-'0');
return _is;
}
ostream &operator<<(ostream &_os,const bigint &_num)
{
for(int i=_num.val.size()-1;i>=0;i--)
_os<<_num.val[i];
return _os;
}
+ 和 * 一算就卡死,能调好给一关。