题解 | #牛群的编码#

牛群的编码

https://www.nowcoder.com/practice/fd18eec140244f31ac817757a54b4a39

知识点

字符串 高精度加法

思路

二进制加法与十进制加法的区别仅仅是进位的不同,所以我们可以沿用高精度加法的模板,具体思路类似于竖式。

首先判断那个字符串更长(数位右对齐),将它作为底,然后从两个字符串的末位开始相加并用t存储进位。当较短字符串的每一位都遍历完后,还要处理t与较长字符串剩余部分。在遍历完整个较长字符串以后,若t仍不为0,则需要补充前导进位,例如11+1=100,数位会增加一位。

代码c++

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param a string字符串
     * @param b string字符串
     * @return string字符串
     */
    string add(string  a, string b) {
        int t = 0;
        for (int i = b.size() - 1, j = a.size() - 1; i >= 0; i--, j--) {
            if (b[i] - '0' + a[j] - '0' + t >= 2) {
               
                a[j] = b[i] - '0' + a[j] - '0' + t-2+'0';
                 t = 1;

            } else {
                a[j] = a[j] - '0' + b[i] - '0' + '0' + t;
                t = 0;
            }
        }
        for (int i = a.size() - b.size()-1; i >= 0 && t >= 1; i--) {
            if ( a[i] - '0' + t == 2) {
                t = 1;
                a[i] = '0';
            } else {
                a[i] = a[i] - '0' + t + '0';
                t = 0;
            }
        }
        string ans="1";
        if(t!=0)
        {
            ans+=a;
            return ans;
        }
        else return a;
    }
    string addBinary(string a, string b) {
        // write code here
        string ans ;
        if (a.size() > b.size())return add(a, b);
        else return add(b, a);

    }
};```
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 12:05
俺不中了,BOSS遇到了一个hr,我觉得我咨询的问题都很正常吧,然后直接就被拒绝了???
恶龙战士:你问的太多了,要不就整理成一段话直接问他,一个一个问不太好
点赞 评论 收藏
分享
点赞 评论 收藏
分享
07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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