【LeetCode】C++ :简单题 - 67 二进制求和

67. 二进制求和

难度简单534

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0

 

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

 

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

这个问题的思路,和二进制列竖式计算方式一样的。

主要注意的是,要先把二进制的位数对齐,前面不够的补上0就可以了,其次是记得在计算式要根据ASCII码来减去96。前面我忘记了提交一直报错还找不到问题所在,很头疼,后来才发现ASCII的问题。那么,在以后遇到string类型的加减计算我应该都要记得ASCII的重要性了。

我这里考虑进位的情况是增加了add变量,如果需要进位的add=1,不需要add=0,然后在计算时把add加进去就好了。

class Solution {
public:
    string addBinary(string a, string b) {
        string res = "";
        int lena = a.length();
        int lenb = b.length();
        if (lena < lenb  ){
            for(int i = 0; i < lenb - lena; i++){
                a = "0" + a;
            }
        }else if (lena > lenb){
            for(int i = 0; i < lena - lenb; i++){
                b = "0" + b;
            }
        }
        // cout << a << " " << b ;
        int len = a.length();
        int add = 0;
        for(int i = len - 1; i >= 0; i--){
            if(a[i] + b[i] + add - 96== 2){
                res = "0" + res;
                add = 1;
            }else if (a[i] + b[i] + add - 96 == 3){
                res = "1" + res;
                add = 1;
            }else if (a[i] + b[i] + add - 96 == 1){
                res = "1" + res;
                add = 0;
            }else if (a[i] + b[i] + add - 96 == 0) {
                res = "0" + res;
                add = 0;
            }
        }
        // cout << add;
        if (add == 1){
            res = "1" + res;
            // cout << res;
        }
        return res;
    }
};

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值