每日力扣算法题(简单篇)

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;

}

你可能感兴趣的:(力扣简单篇,算法,leetcode,数据结构)