415.字符串相加
原题:
给定两个字符串形式的非负整数 num1
和num2
,计算它们的和并同样以字符串形式返回。
你不能使用任何內建的用于处理大整数的库(比如 BigInteger
), 也不能直接将输入的字符串转换为整数形式。
解题思路:
字符串相加,这里不能转换成正整数再相加,会溢出,那么我们就只能直接相加了,模拟一下平时做加法的过程,先加上两个数字,如果大于十就进一位,重复这样的步骤,那么我们就需要一个数字来保存这一位相加的数字,然后再判断要不要进位,这样我们就能很快的捋出思路,先相加,再进位
知识储备:
memset函数,函数原型memset(指针,要初始化的值,所有元素所占的字节数),将指针所指的那一块所有元素初始化
都看到这里了,点个赞吧,可以的话点个关注吧
源代码:
char * addStrings(char * num1, char * num2){
int len1=strlen(num1),len2=strlen(num2);
int maxlen=len1>len2?len1:len2,top=maxlen+1;
char *ans=malloc(sizeof(char)*(maxlen+2));
memset(ans,48,sizeof(char)*(maxlen+2));
ans[top]='\0';
len1--;len2--;top--;
while(len1>=0&&len2>=0)
{
int up=num1[len1]+num2[len2]-96;
if(up>=10)
{
up-=10;
ans[top--]+=up;
ans[top]++;
}else
{
ans[top]+=up;
if(ans[top]>=58)
{
ans[top]-=10;
ans[top-1]++;
}
top--;
}
len1--;len2--;
}
if(len1>=0)
{
while(len1>=0)
{
ans[top]+=(num1[len1]-48);
if(ans[top]>=58)
{
ans[top]-=10;
ans[top-1]++;
}
top--;len1--;
}
}else
{
while (len2>=0)
{
ans[top]+=(num2[len2]-48);
if(ans[top]>=58)
{
ans[top]-=10;
ans[top-1]++;
}
top--;len2--;
}
}
if(ans[0]==48)
{
return ans+1;
}
return ans;
}