leetcode67

1.题目

Given two binary strings a and b, return their sum as a binary string.

Example 1:

Input: a = "11", b = "1"
Output: "100"

Example 2:

Input: a = "1010", b = "1011"
Output: "10101"

2.思路

之前想的是先转成十进制再计算了转换回去,但是发现再c++里面很难实现

采取和66一样的做法,设置一个进位标志位来进行计算,同时从最右边开始进行计算

3.代码

#include <iostream>
#include <string>

using namespace std;

class Solution {
public:
    string addBinary(string a, string b) {
        string result;
        int carry = 0; //进位标志位
        int i = a.size() - 1;
        int j = b.size() - 1;

        while (i >= 0 || j >= 0 || carry > 0) {
            int sum = carry;

            if (i >= 0) {
                sum += a[i] - '0';
                i--;
            } /* 将字符转换为数字。在ASCII编码中,字符 '0' 对应的是数字 48,字符 '1' 对应的是数字 49,以此类推。
              因此,通过将字符减去 '0',我们可以得到对应的数字值,例如 '0' 变成 0,'1' 变成 1,以此类推*/

            if (j >= 0) {
                sum += b[j] - '0';
                j--;
            }
            result = to_string(sum % 2) + result; //将字符串形式的二进制值添加到结果字符串 result 的最前面
            //sum %2 得到当前的二进制的值
            carry = sum / 2;
            //得到进位的值
        }

        return result;
    }
};

int main() {
    Solution solution;
    string a = "1010";
    string b = "1011";
    string sum = solution.addBinary(a, b);
    cout << "Sum: " << sum << endl;

    return 0;
}

4.总结

1.比如说二进制 %2 代表当前位二进制的值  /2代表它的进位值

                十进制 %10 代表了当前位的十进制的值  /10代表了当前的进位值

2.这里的字符‘0’对应的ascii编码为48 ,这里的a[i] - '0' 得到当前对应的数字值

3. to_string(), 将字符串形式的二进制值添加到结果字符串的最前面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值