/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @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;
}