/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
 #define Max 100000

 void Str2Int(char *str, int *num, int *Len);
 int *Sum(int *num1, int *num2, int *Len1, int *Len2, int *ResultLen);
char* solve(char* s, char* t ) {
    int *num1=(int *)malloc(sizeof(int)*Max);
    int *num2=(int *)malloc(sizeof(int)*Max);
    int Len1=0,Len2=0;
    //Str2Int
    Str2Int(s,num1,&Len1);
    Str2Int(t,num2,&Len2);

    //Sum
    int *ResultinInt;
    int ResultLen;
    if(Len1>=Len2){
        ResultLen=Len1+1;
        ResultinInt=Sum(num1,num2, &Len1, &Len2, &ResultLen);
    }
    else{
        ResultLen=Len2+1;
        ResultinInt=Sum(num2,num1, &Len2, &Len1, &ResultLen);
    }

    char *ResultinChar=(char *)malloc(sizeof(char)*(ResultLen+1));
    for(int i=ResultLen-1,j=0;i>=0;i--,j++)
        ResultinChar[j]=ResultinInt[i]+'0';
    ResultinChar[ResultLen]='\0';
    
    return ResultinChar;
}

void Str2Int(char *str, int *num, int *Len){
if(str[0]=='\0')
        num[(*Len)++]=0;
else{
    while(str[*Len]!='\0'){
    num[*Len]=str[*Len]-'0';
    (*Len)++;
    }
    }
}

 int * Sum(int *num1, int *num2, int *Len1, int *Len2, int *ResultLen){
    //Assume Len1>Len2
    int *result=(int *)malloc(sizeof(int)*(*ResultLen));
    int Index1,Index2,Index3;
    int Adv=0; //进位符
    for(Index1=(*Len1)-1,Index2=(*Len2)-1,Index3=0;Index2>=0;Index1--,Index2--,Index3++){
        result[Index3]=(num1[Index1]+num2[Index2]+Adv)%10;
        Adv=(num1[Index1]+num2[Index2]+Adv)/10;
    }
    while(Index1>=0){
        result[Index3]=(num1[Index1]+Adv)%10;
        Adv=(num1[Index1]+Adv)/10;
        Index1--;
        Index3++;
    }

    if(Adv) //Adv=1,多一位
        result[Index3++]=Adv;

    *ResultLen=Index3;
    return result;
 }