#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 计算两个数之和
char* solve(char* s, char* t ) {
    int lens = strlen(s);
    int lent = strlen(t);
    // 保证lens是比较长的
    if (lens < lent) {
        char* tmp = s;
        s = t;
        t = tmp;
        int temp = lens;
        lens = lent;
        lent = temp;
    }
    // 结果字符串最大可能长度是较长输入字符串长度加1(考虑进位)
    char* a = (char*)malloc((lens + 1) * sizeof(char));
    if (a == NULL) {
        printf("内存分配失败\n");
        return NULL;
    }
    int lena = 0;  // 用于记录结果字符串a当前存储的位置索引,从开头往后存储,初始为0
    int carry = 0;
    int i = lens - 1;  // s字符串从末尾往前的索引
    int j = lent - 1;  // t字符串从末尾往前的索引
    while (j >= 0) {
        int sum = (s[i] - '0') + (t[j] - '0') + carry;
        carry = sum / 10;
        a[lena++] = sum % 10 + '0';
        i--;
        j--;
    }
    while (i >= 0) {
        int sum = (s[i] - '0') + carry;
        carry = sum / 10;
        a[lena++] = sum % 10 + '0';
        i--;
    }
    if (carry > 0) {
        a[lena++] = carry + '0';
    }
    a[lena] = '\0';  // 添加字符串结束符

    // 反转结果字符串a,使其顺序正确
    int left = 0;
    int right = lena - 1;
    while (left < right) {
        char temp = a[left];
        a[left] = a[right];
        a[right] = temp;
        left++;
        right--;
    }

    return a;
}