题解 | 大数加法

大数加法

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

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 计算两个数之和
 * @param s string字符串 表示第一个整数
 * @param t string字符串 表示第二个整数
 * @return string字符串
 */
char* solve(char* s, char* t ) {
    int len1 = strlen(s);
    int len2 = strlen(t);
    int len = (len1 > len2 ? len1 : len2) + 2; //+2的含义是:两者相加最多会溢出1位 + 终止符
    char* newStr = (char*)malloc(len);
    int upToTen = 0; //记录是否需要进位
    int sum = 0;

    if (s == NULL || t == NULL) {
        return NULL;
    }
    //设置终止符
    newStr[len - 1] = '\0';
    //设置操作起始点,避开终止符
    len--;
    len1--;
    len2--;
    //遍历相加
    while (len1 >= 0 || len2 >= 0) {
        //字符串数字比普通数字常量要大0x30(即符号'0')
        if (len1 < 0) { //数组s已经遍历结束,但t还未结束,因此等同于与0相加
            sum = 0 + t[len2] - '0' + upToTen;
        } else if (len2 < 0) { //数组t已经遍历结束,但s还未结束,因此等同于与0相加
            sum = s[len1] + 0 - '0' + upToTen;
        } else {
            sum = s[len1] + t[len2] - 2 * '0' + upToTen;
        }
        //检查是否需要进位
        if (sum > 9) {
            upToTen = 1;
        } else {
            upToTen = 0;
        }
        //按字符串数字形式放入新数组
        newStr[--len] = (sum % 10) + '0';
        len1--;
        len2--;
    }
    //遍历结束后如果还有进位,则设置最高位为1
    if (upToTen == 1) {
        newStr[--len] = 1 + '0';
    }

    return &newStr[len];
}

全部评论

相关推荐

看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务