typedef string::size_type type;
class high_precision{//高精度
private:
typedef string::size_type type;
public:
vector<int> a;
int remainder;
static const type npos=string::npos;
high_precision(vector<int> s){a=s;}
high_precision(){}
high_precision(int x){vector<int> b(x);a=b;}
//将会覆盖过原数
template<class T>
int length(T& arr){
return sizeof(arr)/sizeof(arr.size());
}void put(){
for(type i=a.size()-1;i>0;i--)
cout<<a[i];
}void put(vector<int> ans){
for(type i=ans.size()-1;i>0;i--)
cout<<ans[i];
}//put高精度输出
vector<int> operator+=(vector<int> b){
type maxl=a.size()>b.size()?a.size():b.size();
vector<int> c(maxl+1);
for (type i=0;i<maxl;i++){
c[i+1]=(a[i]+b[i]+c[i])/10;//进位
c[i]=(a[i]+b[i]+c[i])%10;//求和
}a=c;
if(a[a.size()-1]==0) a.pop_back();
if(a[0]==0) a.push_back(0);
if(a.size()<maxl) a.push_back(0);
if(a[0]+b[0]>=10) a.push_back(0);
return a;
}//高精加
vector<int> operator-=(vector<int> b){
string s;bool o;
if(a.size()<b.size()||(a.size()==b.size()&&a<b)){o=1;swap(a,b);}
else o=0;
vector<int> c;
for (type i=0;i<a.size();i++){
if (a[i]<b[i]){//借位
a[i+1]--;a[i]+=10;
}c.push_back(a[i]-b[i]);
}while(c[c.size()-1]==0&&c.size()>1) c.pop_back();
a=c;
if(o) a.push_back(1);
else a.push_back(0);
return a;
}//高精减(负数a[a.size()-1]是1,正数a[s.size()-1]是0,0就是0)
vector<int> operator*=(vector<int> b){
vector<int> c(a.size()+b.size());
for (type i=0;i<a.size();i++)
for (type j=0;j<b.size();j++){
c[i+j+1]+=(c[i+j]+a[i]*b[j])/10;
c[i+j]=(c[i+j]+a[i]*b[j])%10;
}
a=c;return a;
}//高精乘高精
vector<int> operator/=(long long int b){
vector<int> c;
remainder=0;//余数
for (type i=a.size()-1;i>0;i--){
c.push_back((remainder*10+a[i])/b);
remainder=(remainder*10+a[i])%b;
}while (c[c.size()-1]==0&&c.size()>1) c.pop_back();
a=c;return a;//返回值是商,余数将会自动保存到remainder
}//高精除低精
void operator=(high_precision ss){a=ss.a;}
bool operator==(high_precision ss){return ss.a==a;}
void push_back(int x){a.push_back(x);}
void pop_back(){a.pop_back();}
int find(type x){
for(type i=0;i<a.size();i++)
if(i==x) return i;
return npos;
}//寻找"x"的位置,返回数组下标
int find(int x,int y,int z){
for(int i=y;i<z;i++)
if(i==x) return i;
return npos;
}//从y-z找"x"的位置,返回数组下标
type size(){return a.size();}
int operator[](int i){return a[i];}
vector<int>::const_iterator
begin() const _GLIBCXX_NOEXCEPT{return a.begin();}
vector<int>::const_iterator
end() const _GLIBCXX_NOEXCEPT{return a.end();}
};
会出现前导零、输出错误、数组越界等错误,求改