大数算和的问题,应该是某处逻辑又崩了

能否帮忙找一下逻辑错误,我有点崩,牛客网上那个第四组案例真有那么大的数啊。

char* resolve(char arr[])//倒转字符串的函数
{
    int r = strlen(arr) - 1;
    int l = 0;
    while (l < r)
    {
        char mid = arr[l];
        arr[l] = arr[r];
        arr[r] = mid;
        l++;
        r--;
    }
    return arr;
}
void restr(char* t, char* s,int tr,int sr)//t right,s right
{
    //t比s长才执行这个函数
    int i = 0;
    for (i = 0; i <= tr; i++)
    {
        char mid = t[i];
        t[i] = s[i];
        s[i] = mid;
    }
}
char* solve(char* s, char* t)//大数相加函数
{
    // write code here
    char p[100001] = { 0 };
    int slen = strlen(s);//计算长度,方便对位计算(个位加个位,十位加十位)
    int tlen = strlen(t);
//谁长以谁为准来确定位,但就让长的变成slen,s
    if (tlen >slen)
    {
        restr(t, s,tlen - 1,slen - 1);
        int mid = slen;
        slen = tlen;
        tlen = mid;
    }
        int i = 0;
        int n = 0;//用来存储进位产生的1,但初始时肯定是0没有进1的
        for (i = 0; i < slen + 1; i++)
        {
            if (i < tlen)
            {
                if (*(s + slen - i - 1) + *(t + tlen - i - 1) + n - 2 * '0' < 10)//未产生进位
                {
                    p[i] = *(s + slen - i - 1) + *(t + tlen - i - 1) + n - '0';
                    n = 0;
                }
                else //产生进位
                {
                    int sum = *(s + slen - i - 1) + *(t + tlen - i - 1) + n - 2 * '0';//这是一个二位数了
                    p[i] = sum - 10 + '0';
                    n = 1;
                }
            }
            else if (i < slen)//这时下标越过短的数字了,就完全在长数字里
            {
                if (n == 1)//在与短数字最高位运算后,是否进1
                {
                    int mid = *(s + slen - i - 1) + n - '0';
                    if (mid < 10)//进1后是否能又进1
                    {
                        p[i] = mid + '0';
                        n = 0;
                    }
                    else
                    {
                        p[i] = mid - 10 + '0';
                    }
                }
                else
                {
                    p[i] = *(s + slen - i - 1);
                }
            }
            else
            {
                if (n)//如果在长数字最高位运算后仍进1
                {
                    p[i] = '1';
                }
            }

        }
        return resolve(p);//返回字符串时还应注意将字符串颠倒一下
    
}
int main()
{
    char arr1[100000] = { 0 };//整数1
    char arr2[100000] = { 0 };//整数2
    scanf("%s", arr1);
    scanf("%s", arr2);
    printf("%s\n", solve(arr1, arr2));
    return 0;
}