/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
char* solve(char* s, char* t ) {
    int len1 = strlen(s);
    int len2 = strlen(t);
    int len = (len1 > len2 ? len1 : len2) + 2; //+2的含义是:两者相加最多会溢出1位 + 终止符
    char* newStr = (char*)malloc(len);
    int upToTen = 0; //记录是否需要进位
    int sum = 0;

    if (s == NULL || t == NULL) {
        return NULL;
    }
    //设置终止符
    newStr[len - 1] = '\0';
    //设置操作起始点,避开终止符
    len--;
    len1--;
    len2--;
    //遍历相加
    while (len1 >= 0 || len2 >= 0) {
        //字符串数字比普通数字常量要大0x30(即符号'0')
        if (len1 < 0) { //数组s已经遍历结束,但t还未结束,因此等同于与0相加
            sum = 0 + t[len2] - '0' + upToTen;
        } else if (len2 < 0) { //数组t已经遍历结束,但s还未结束,因此等同于与0相加
            sum = s[len1] + 0 - '0' + upToTen;
        } else {
            sum = s[len1] + t[len2] - 2 * '0' + upToTen;
        }
        //检查是否需要进位
        if (sum > 9) {
            upToTen = 1;
        } else {
            upToTen = 0;
        }
        //按字符串数字形式放入新数组
        newStr[--len] = (sum % 10) + '0';
        len1--;
        len2--;
    }
    //遍历结束后如果还有进位,则设置最高位为1
    if (upToTen == 1) {
        newStr[--len] = 1 + '0';
    }

    return &newStr[len];
}