探索数组和字符串 二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = “11”, b = “1”
输出: “100”
示例 2:
输入: a = “1010”, b = “1011”
输出: "10101"

思路:
1.用aoti转成整型进行进位再转回string,没有考虑到超出INT_MAX的情况所以不可行

class Solution {
public:
    string addBinary(string a, string b) {
        if(a=="0" && b=="0"){
            return "0";
        }
        int a1=atoi(a.c_str());
        int b1=atoi(b.c_str());
        int sum=a1+b1;
        string str="";
        while(sum!=0){
            str+=char(sum%10%2+'0');
            int temp=sum%10/2;
            sum=sum/10+temp;
        }
        reverse(str.begin(),str.end());
        return str;
    }
};

2.因为int型会有数据溢出的情况所以直接对字符串进行处理

class Solution {
public:
    string addBinary(string a, string b) {
        reverse(a.begin(),a.end());//因为要进行补0所以先反转字符串
        reverse(b.begin(),b.end());
        string str="";//设置一个空串
        if(a.length()>=b.length()){//a比b长对b进行补0
            int length=a.length()-b.length();
            for(int i=0;i<length;i++){
                b+="0";
            }
        }
        else if(a.length()<b.length()){
            int length=b.length()-a.length();
            for(int i=0;i<length;i++){
                a+="0";
            }
        }
        for(int i=0;i<a.length();i++){//此时两串长度相等
            int c=int(a[i]-'0')+int(b[i]-'0');//从第一位开始转成int型
            if(c>=2 && i!=a.length()-1){//c大于2需要进行进位
                str+=char(c%2+'0');
                a[i+1]=a[i+1]+c/2;//如2进位后后面的一位需要进1,所以将这个1直接加在a的后一位上
            }
            else if(c<2){
                str+=char(c+'0');
            }
            else if(c>=2 && i==a.length()-1){//已经到a串的最后一位并大于0
                str+=char(c%2+'0');
                str+=char(c/2+'0');
            }
        }
        reverse(str.begin(),str.end());
        return str;
    }
};
发布了70 篇原创文章 · 获赞 39 · 访问量 2246

猜你喜欢

转载自blog.csdn.net/weixin_45221477/article/details/105223514