1. 高精度加法

string add(string a1,string b1){
    string c1;
    int lena=a1.size(),lenb=b1.size(),lenc=1,aa[5005]={},bb[5005]={},cc[5005]={};
    for(int i=0;i<lena;i++)aa[lena-i]=a1[i]-'0';
    for(int i=0;i<lenb;i++)bb[lenb-i]=b1[i]-'0';
    while(lenc<=lenb||lenc<=lena){
        cc[lenc]+=bb[lenc]+aa[lenc];
        cc[lenc+1]=cc[lenc]/10;
        cc[lenc]%=10;
        lenc++;
    }
    if(!cc[lenc])lenc--;
    while(lenc>=1)c1+=cc[lenc--]+'0';
    return c1;
}

2. 高精度减法

string sub(string a1,string b1){
    string c1;
    int lena=a1.size(),lenb=b1.size(),lenc=1,aa[5005]={},bb[5005]={},cc[5005]={};
    for(int i=0;i<lena;i++)aa[lena-i]=a1[i]-'0';
    for(int i=0;i<lenb;i++)bb[lenb-i]=b1[i]-'0';
    while(lenc<=lena||lenc<=lenb){
        cc[lenc]+=aa[lenc]-bb[lenc];
        if(cc[lenc]<0)cc[lenc]+=10,cc[lenc+1]--;
        lenc++;
    }
    while(!cc[lenc]&&lenc>1)lenc--;
    while(lenc>=1)c1+=cc[lenc--]+'0';
    return c1;
}

3. 高精度乘法

string mul(string a1,string b1){
	string c1;
	int lena=a1.size(),lenb=b1.size(),lenc=lena+lenb,aa[5005]={},bb[5005]={},cc[10005]={};
	for(int i=0;i<lena;i++)aa[lena-i]=a1[i]-'0';
	for(int i=0;i<lenb;i++)bb[lenb-i]=b1[i]-'0';
	for(int i=1;i<=lena;i++){
		for(int j=1;j<=lenb;j++){
			cc[i+j-1]+=aa[i]*bb[j];
			cc[i+j]+=cc[i+j-1]/10;
			cc[i+j-1]%=10;
		}
	}
	while(!cc[lenc]&&lenc>1)lenc--;
	while(lenc>=1)c1+=cc[lenc--]+'0';
	return c1;
}