题解 | #大数加法#

大数加法

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */


char* solve(char* a, char* b ) {
    // write code here

    // if ((a == "0") || (b == "0")) return a == "0" ? b : a;
    int alen = strlen(a), blen = strlen(b);
    //获取大小两个字符串。
    char* big = alen >=  blen ? a : b;
    char* small = alen < blen ? a : b;
    int ret = 0;
    int i = 0, j = 0, pos = 0;
    int biglen = strlen(big);
    int smalllen = strlen(small);
    //fxs 这里为什么是加2呢,一个是'\0',一个用来存储进位。
    char* ans = malloc(sizeof(char) * (biglen + 2));
    ans[biglen + 1] = '\0';
    printf("fxs smallen = %d, biglen = %d\r\n", smalllen, biglen);
    //从字符串末尾开始进行加法。
    for (i = smalllen - 1, j = biglen - 1, pos = biglen; j >= 0; j--, i--, pos--) {
        if (i >= 0) {
            ans[pos] = (small[i] + big[j] - '0' - '0' + ret) % 10 + '0';
            ret = (small[i] + big[j] - '0' - '0' + ret) / 10;

        } else {
            ans[pos] =  ((big[j] - '0' + ret) % 10) + '0';
            ret = (big[j] - '0' + ret) / 10;
        }
    }
    if (ret) {
        ans[0] = '1';
    } else ans++;

    return ans;
}

全部评论
对于二进制的话只要将上述10改为2即可实现。
点赞 回复 分享
发布于 2023-07-25 11:00 北京

相关推荐

找不到工作死了算了:没事的,雨英,hr肯主动告知结果已经超越大部分hr了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务