使用指针避免拷贝
void Bign_Add(string* a,string* b,string& ans){
unsigned long lena=a->length(),lenb=b->length();
ans.clear();
if(lena<lenb){
string* temp=a;
a=b;
b=temp;
lena=a->length(),lenb=b->length();
}
int carry=0;
for(int i=lena-1,j=lenb-1,k=0;i>=0;k++,i--,j--){
ans+=char(((*a)[i]-'0'+ (j>=0?(*b)[j]-'0':0) +carry)+'0');
carry=(ans[k]-'0')/10;
ans[k]=char('0'+(ans[k]-'0')%10);
}
if(carry)ans+=char(carry+'0');
reverse(ans.begin(),ans.end());
}
短string补‘0’
void Bign_Add(string* a,string* b,string& ans){
ans.clear();
reverse(a->begin(),a->end());
reverse(b->begin(),b->end());
int lena=a->size(),lenb=b->size();
if(lena<lenb)
for(int i=0;i<(lenb-lena);i++)a+='0';
else
for(int i=0;i<(lena-lenb);i++)b+='0';
int carry=0;
int i;
for(i=0;i<lena||i<lenb;i++){
ans+=((*a)[i]-'0'+(*b)[i]-'0'+carry)+'0';
carry=(ans[i]-'0')/10;
ans[i]=((ans[i]-'0')%10+'0');
}
if(carry)ans+=(carry+'0');
reverse(ans.begin(),ans.end());
}