题解 | #牛群的编码#

牛群的编码

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);

    }
};```
全部评论

相关推荐

双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
牛客162194370号:
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务