题解 | 大数加法

大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
#include <stdlib.h>
char* solve(char* s, char* t ) {
    // write code here
    int len_s = strlen(s);
    int len_t = strlen(t);

    if(len_s == 0) 
        return NULL;
    if(len_t == 0) 
        return NULL;

    int max_len = (len_s > len_t ? len_s : len_t) + 1;//考虑进位

    char* result = (char*)malloc( (max_len + 1) * sizeof(char) );
    if(!result) return NULL;

    result[max_len] = '\0';

    int carry = 0;
    int i = len_s - 1; //t最后一个字符的位置
    int j = len_t - 1;//s最后一个字符的位置

    int k = max_len - 1;//结果字符串的最后一个字符的位置

    while(i >= 0 || j >= 0 || carry)
    {
        int sum = carry;
        if(i >= 0) sum += s[i--] - '0';// -'0'表示转为数字相加
        if(j >= 0) sum += t[j--] - '0';

        carry = sum / 10;
        result[k--] = sum % 10 + '0';// + '0'表示数字转为字符
    }

    return (result[k+1] != '\0') ? &result[k+1] : result;

}

思路解析:

1.利用strlen,求出输入的两个字符串的长度。

2.动态申请一段内存,考虑到进位情况,因此要比输入的字符串中的最大数多一位。

3.利用while循环,从字符数组的最后位开始,分别对每个位进行相加,同时考虑进位的情况。

4.最后要考虑'0'+'0',和'0' + ' '的情况。

全部评论

相关推荐

求实习的小白1213:华科去这 你是真敢去啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务