二进制加法,二进制数以字符串形式保存,最终返回字符串

思路:先将字符串反转,用max()选出两个字符串中长的那个,短的补位0,从低位到高位计算,进位初始值0,计算时每次遍历结果为(进位+a[i] + b[i])%2,进位改为(进位+a[i] + b[i])/2,字符串全部遍历结束时如果进位不为0,将其添加到最高位。

ps:字符串反转用reverse(a.begin() , a.end() );

字符串末尾插入:a.push_back();

选大的数用max(int a,int b);

代码:

class Solution {
public:
    string addBinary(string a, string b) {
        string ans;
        reverse(a.begin(),a.end());
        reverse(b.begin(),b.end());
        int n=max(a.size(),b.size());
        int carry=0;
        for(int i=0;i<n;i++)
        {
            if(i<a.size()&&a[i]=='1')
            {
                carry+=1;
            }
            if(i<b.size()&&b[i]=='1')
            {
                carry+=1;
            }
            ans.push_back((carry%2)?'1':'0');
            carry=carry/2;
        }
        if(carry)
        {
            ans.push_back('1');
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
};

 

posted @ 2022-10-07 21:33  sssyh  阅读(53)  评论(0)    收藏  举报