标签: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