- Gerrard 的博客
高精度模板1
- @ 2024-9-7 21:21:57
高精度模板
#include <bits/stdc++.h>
using namespace std;
//大整型
class BigInt:public vector<int> {
public :
BigInt() {push_back(0);}
BigInt(int x){push_back(x);proccess_digit();}
BigInt &operator*=(int x){
for(int i=0;i<size();i++) at(i)*=x;
proccess_digit();
return *this;
}
BigInt operator*(int x){BigInt ret(*this);ret*=x;return ret;}
BigInt operator+=(int x){at(0)+=x;proccess_digit();return *this;}
BigInt operator+(int x){BigInt ret(*this);ret+=x;return ret;}
BigInt operator/(int x){
BigInt ret(*this);
int y=0;
for(int i=size()-1;i>=0;i--){y=y*10+at(i);ret[i]=y/x;y%=x;}
ret.proccess_digit();
return ret;
}
BigInt operator/=(int x){
BigInt ret(*this);
int y=0;
for(int i=size()-1;i>=0;i--){y=y*10+at(i);ret[i]=y/x;y%=x;}
ret.proccess_digit();
return ret;
}
bool operator>(const BigInt &a) const{
if(size()!=a.size()) return size()>a.size();
for(int i=size()-1;i>=0;i--) if(at(i)!=a[i]) return at(i)>a[i];
return false;
}
bool operator<(const BigInt &a) const{
if(size()!=a.size()) return size()<a.size();
for(int i=size()-1;i>=0;i--) if(at(i)!=a[i]) return at(i)<a[i];
return true;
}
private :
void proccess_digit(){
for(int i=0;i<size();i++){
if(at(i)<10) continue;
if(i+1==size()) push_back(0);
at(i+1)+=at(i)/10;
at(i)%=10;
}
return;
}
};
ostream &operator<<(ostream &out,const BigInt &a){
for(int i=a.size()-1;i>=0;i--) out<<a[i];
return out;
}
int main(){
return 0;
}