高精度处理非常大的数字,通过数组或者字符串实现,以下以数组的方式实现加减乘除(仅展示部分代码)。
vector<int> add(const vector<int> &a,const vector<int> &b){
vector<int> c;
int carry=0;
for(int i=0;i<max(a.size(),b.size())||carry;++i){
int sum=carry;
if(i<a.size()) sum+=a[i];
if(i<b.size()) sum+=b[i];
c.push_back(sum%10);
carry=sum/10;
}
return c;
}
vector<int> sub(const vector<int> &a,const vector<int>& b){
vector<int> c;
int borrow=0;
for(int i=0;i<a.size();++i){
int diff=a[i]-borrow;
if(i<b.size()) diff-=b[i];
if(diff<0){
diff+=10;
borrow=1;
}
else{
borrow=0;
}
c.push_back(diff);
}
while(c.size()>1&&c.back()==0) c.pop_back();
return c;
}
vector<int> multiply(const vector<int> &a,const vector<int> &b){
vector<int> c(a.size()+b.size());
for(int i=0;i<a.size();++i){
for(int j=0;j<b.size();++j){
c[i+j]+=a[i]*b[j];
}
}
int carry=0;
for(int i=0;i<c.size();++i){
int sum=c[i]+carry;
c[i]=sum%10;
carry=sum/10;
}
while(c.size()>1&&c.back()==0) c.pop_back();
return c;
}
//除法就只写大整数/小整数了,大整数/大整数还没见过,遇到了再改
vector<int> div(const vector<int> &a,int b){
vector<int> c;
long long rem=0;
for(int i=a.size()-1;i>=0;--i){
rem=rem*10+a[i];
c.push_back(rem/b);
rem=rem%b;
}
reverse(c.begin(),c.end());
while(c.size()>1&&c.back()==0) c.pop_back();
return c;
}
//数字转化为数组,统一一下模板,不用再单独去写一个数组和小整数了
vector<int> tov(int a){
vector<int> c;
while(a){
int b=a%10;
c.push_back(b);
a/=10;
}
return c;
}