LeetCode·每日一题·415. 字符串相加·模拟

作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

思路

题意 -> 给定二个字符串,计算它们的和并同样以字符串形式返回。

直接从尾部向头部进行枚举,模拟实际计算过程,每取一个数就将字符转换为数字,然后计算之后再将其转换为字符存储,最后判断是否存在进位,如果存在进位就将进位也存储。

关于进位的一个技巧,因为和运算,进位只可能有 1,因此在开辟内存的时候就将进位的位置开辟出来,并赋值 为 1,最后返回时,如果存在进位就返回字符串首地址,反之返回字符串首地址 + 1 ---- 去取进位影响。

代码注释超级详细

ps:此题我在去年的时候也做过一次,再回看当时代码时,感慨万千,通过看代码就知道,当时代码水平非常有限,代码写的也非常冗余,经过一年的学习,进步还是非常明显的。各位努力吧!!!

代码

char * addStrings(char * num1, char * num2){
    int len1 = strlen(num1);
    int len2 = strlen(num2);
    int len = (len1 > len2 ? len1 : len2) + 2;
    char *ans = malloc(sizeof(char) * len);
    memset(ans, 0, len);//初始化
    ans[0] = '1';//进位赋值
    int c = 0;//记录进位
    for (int i = len - 2; i > 0; i--) {
        int sum = 0;//记录和
        if (len1 > 0) {//取数
            sum += (num1[len1 - 1] - '0');
            --len1;
        }
        if (len2 > 0) {//取数
            sum += (num2[len2 - 1] - '0');
            --len2;
        }
        sum += c;//加上一位的进位
        c = sum / 10;//保存进位
        sum %= 10;//保存当前位
        ans[i] = sum + '0';//字符存储
    }
    return c ? ans : ans+1;//判断进位返回对应地址
}

作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
char * addStrings(char * num1, char * num2){
    int num1_len = strlen(num1);
    int num2_len = strlen(num2);
    int len_1 = num1_len-1;
    int len_2 = num2_len-1;
    int max_len = num1_len>num2_len ? num1_len : num2_len;
    char * num = malloc(sizeof(char) * (max_len+2));
    int i =0,sum = 0,max = max_len+2;
    while(len_1>=0&&len_2>=0)
    {
        sum = (num1[len_1--]-'0')+(num2[len_2--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    while(len_1>=0)
    {
        sum = (num1[len_1--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    while(len_2>=0)
    {
        sum = (num2[len_2--]-'0')+i;
        i = sum/10;
        sum = sum%10;
        num[max_len--] = sum+'0';
    }
    if(i>0)
    {
        num[0] = i+'0';
        num[max-1] ='\0';
        return num;
    }
    num[max-1] ='\0';
    return ++num;
    
}


作者:小迅
链接:https://leetcode.cn/problems/add-strings/solutions/2347085/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-fges/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

猜你喜欢

转载自blog.csdn.net/m0_64560763/article/details/131761702