适用于刚入门的小白理解。
解释一下,为了统一,将每个函数设置为void类型,a,b为已知的两个大数,c是传入的迭代器,无返回值。
void add(string a,string b,string &c){
int lena=a.size(),lenb=b.size();
int aa[N]={0},bb[N]={0},ans[N]={0};
for(int i=0;i<lena;i++) aa[lena-i-1]=a[i]-'0';
for(int i=0;i<lenb;i++) bb[lenb-i-1]=b[i]-'0';
int l=max(lena,lenb);
for(int i=0;i<l;i++){
ans[i]+=(aa[i]+bb[i]);
if(ans[i]>=10){
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
while(!ans[l]) l--;
c.clear();
for(int i=l;i>=0;i--)
c+=(ans[i]+'0');
}
void sub(string a,string b,string &c){
int lena=a.size(),lenb=b.size();
if(lena<lenb||(lena==lenb&&a<b)) swap(a,b);
lena=a.size(),lenb=b.size();
int aa[N]={0},bb[N]={0},ans[N]={0};
for(int i=0;i<lena;i++) aa[lena-i-1]=a[i]-'0';
for(int i=0;i<lenb;i++) bb[lenb-i-1]=b[i]-'0';
int l=max(lena,lenb);
for(int i=0;i<l;i++){
ans[i]+=(aa[i]-bb[i]);
if(ans[i]<0){
ans[i]+=10;
aa[i+1]--;
}
}
while(!ans[l]) l--;
c.clear();
for(int i=l;i>=0;i--)
c+=(ans[i]+'0');
}
void mul(string a,string b,string &c){
int lena=a.size(),lenb=b.size();
int aa[N]={0},bb[N]={0},ans[N]={0};
for(int i=0;i<lena;i++) aa[lena-i-1]=a[i]-'0';
for(int i=0;i<lenb;i++) bb[lenb-i-1]=b[i]-'0';
for(int i=0;i<lena;i++){
for(int j=0;j<lenb;j++){
ans[i+j]+=(aa[i]*bb[j]);
ans[i+j+1]+=(ans[i+j]/10);
ans[i+j]%=10;
}
}
int l=lena+lenb;
while(!ans[l]) l--;
c.clear();
for(int i=l;i>=0;i--)
c+=(ans[i]+'0');
}