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