标签:als pac out push size highlight std return using
#include <bits/stdc++.h>
using namespace std;
struct Bigint{
vector<int> num;
bool flag;
Bigint(){
num.clear();
flag=true;
}
Bigint &operator =(int b){
if(b<0){
flag=false;
b=-b;
}
while(b){
(*this).num.push_back(b%10000000);
b/=10000000;
}
return *this;
}
};
bool operator <(Bigint a,Bigint b){
if(a.flag!=b.flag)
return b.flag;
if(a.num.size()!=b.num.size())
return a.num.size()<b.num.size();
for(int i=a.num.size()-1;~i;i--)
if(a.num[i]!=b.num[i])
return a.num[i]<b.num[i];
return false;
}
bool operator <= (Bigint a,Bigint b){
if(a.flag!=b.flag)
return b.flag;
if(a.num.size()!=b.num.size())
return a.num.size()<b.num.size();
for(int i=a.num.size()-1;~i;i--)
if(a.num[i]!=b.num[i])
return a.num[i]<b.num[i];
return true;
}
bool operator ==(Bigint a,Bigint b){
return a.num==b.num&&a.flag==b.flag;
}
bool operator !=(Bigint a,Bigint b){
return !(a==b);
}
bool operator >(Bigint a,Bigint b){
return !(a<=b);
}
bool operator >=(Bigint a,Bigint b){
return !(a<b);
}
Bigint operator -(Bigint a){
a.flag=!a.flag;
return a;
}
Bigint operator +(Bigint a,Bigint b){
if(a.flag==b.flag){
if(a.num.size()<b.num.size())
swap(a,b);
for(int i=0;i<b.num.size();i++)
a.num[i]+=b.num[i];
for(int i=0;i<a.num.size()-1;i++)
if(a.num[i]>100000000){
a.num[i+1]+=a.num[i]/100000000;
a.num[i]%=100000000;
}
while(a.num.back()>100000000){
a.num.push_back(a.num[a.num.size()-1]/100000000);
a.num[a.num.size()-2]%=100000000;
}
}
else {
bool c;
if(a.num.size()<b.num.size())
swap(a,b);
else
if(a<-b)
swap(a,b);
if(a<-b)
c=b.flag;
else
c=a.flag;
for(int i=0;i<b.num.size();i++)
a.num[i]-=b.num[i];
for(int i=0;i<a.num.size()-1;i++)
if(a.num[i]<0){
a.num[i]+=100000000;
a.num[i+1]-=1;
}
while(!a.num.back()&&a.num.size()>1)a.num.pop_back();
a.flag=c;
if(!a.num.back())
a.flag=true;
}
return a;
}
Bigint operator -(Bigint a,Bigint b){
return a+(-b);
}
istream &operator >>(istream &is,Bigint &a){
string str;
int b=0,i,k=0;
is>>str;
i=str.size()-1;
a.num.clear();
if(str[0]==‘-‘){
a.flag=false;
k++;
}
else
a.flag=true;
for(;i>=k;i-=8){
b=(str[i]-‘0‘);
for(int j=1,kk=10;j<8;j++,kk*=10)
if((i-j)>=k)
b+=(str[i-j]-‘0‘)*kk;
else
break;
a.num.push_back(b);
}
return is;
}
ostream &operator <<(ostream &os,Bigint a){
if(!a.flag)
os<<‘-‘;
os<<a.num[a.num.size()-1];
for(int i=a.num.size()-2;~i;i--)
for(int j=0,k=10000000;j<8;j++,k/=10){
os<<a.num[i]/k%10;
}
return os;
}
int main(){
Bigint a,b,c;
int x,y;
cin>>a>>b;
cout<<a-b;
return 0;
}
标签:als pac out push size highlight std return using
原文地址:http://www.cnblogs.com/HC-LittleJian/p/7698493.html