//实现两个大数(字符串)的相加,并返回string类型计算结果
string add(string str_1,string str_2)
{
    string result;//保存计算结果,倒序保存
    string temp;
    bool carryFlag = false;//进位标志,false表述不进位,true表示进位
    string maxString = (str_1.size()>=str_2.size())? str_1 : str_2;
    string minString = (str_1.size()<str_2.size())? str_1 : str_2;
    //将短字符串补齐到和长字符串一样长,在短字符串前边补上字符'0'
    int maxLength = maxString.size();
    int minLength = minString.size();
    temp.append((maxLength - minLength),'0').append(minString);
    minString.clear();
    minString.append(temp);
    //字符串进行倒序遍历,按位相加
    for(int i=(maxString.size()-1);i>=0;i--)
    {
        int res;
        if(carryFlag)//有进位,计算结果res加1;无进位不加1。
            res = (maxString[i]-48)+(minString[i]-48)+1;//字符'0'在ASCII表中对应十进制数是48
        else
            res = (maxString[i]-48)+(minString[i]-48);
    //判断结算结果res是否产生进位,进位标志carryFlag 的状态也要随之改变
        if(res<10)
            carryFlag = false;//res无进位
        else
            carryFlag = true;//res有进位
        result.push_back((res%10)+48);//将res取10的余数转换为字符保存
    }
    //循环结束后,最后还需要判断一次进位标志,判断两个字符串最后一次相加是否产生进位
    if(carryFlag)
        result.push_back(49);//计算结果是倒序保存,所以在最后添加字符'1'
    reverse(result.begin(),result.end());//将计算结果逆置就是实际计算结果
    return result;
}