zoukankan      html  css  js  c++  java
  • Add Binary

    Given two binary strings, return their sum (also a binary string).

    For example,
    a = "11"
    b = "1"
    Return "100".

    思路:逐位相加,进位保留在和的下一位中。

    C++实现代码:

    #include<iostream>
    #include<string>
    #include<vector>
    using namespace std;
    
    class Solution
    {
    public:
        string addBinary(string a, string b)
        {
            int size1=a.size()-1;
            int size2=b.size()-1;
            int size=max(size1,size2);
            string digits(size+1,'0');
            while(size1>=0&&size2>=0)
            {
                if((a[size1]=='1')&&(b[size2]=='1'))
                {
                    digits[size-1]='1';
                    if(size1==0&&size2==0)
                        digits.insert(digits.begin(),'1');
                    size1--;
                    size2--;
                    size--;
                }
                else if(((a[size1]=='1')||(b[size2]=='1'))&&(digits[size]=='0'))
                {
                    digits[size]='1';
                    size1--;
                    size2--;
                    size--;
                }
                else if(((a[size1]=='1')||(b[size2]=='1'))&&(digits[size]=='1'))
                {
                    digits[size]='0';
                    digits[size-1]='1';
                    if(size1==0&&size2==0)
                        digits.insert(digits.begin(),'1');
                    size1--;
                    size2--;
                    size--;
                }
                else
                {
                    digits[size]=digits[size];
                    size1--;
                    size2--;
                    size--;
                }
            }
            cout<<digits<<endl;
            if(size1>=0)
            {
                while(size1>=0&&size>=0)
                {
                    if((digits[size]=='1')&&(a[size1]=='1'))
                    {
                        digits[size]='0';
                        digits[size-1]='1';
                        if(size==0)
                            digits.insert(digits.begin(),'1');
                        size1--;
                        size--;
                    }
                    else if((digits[size]=='1')&&(a[size1]=='0'))
                    {
                        size1--;
                        size--;
                    }
                    else
                    {
                        digits[size]=a[size1];
                        size--;
                        size1--;
                    }
                }
            }
            if(size2>=0)
            {
                while(size2>=0&&size>=0)
                {
                    if((digits[size]=='1')&&(b[size2]=='1'))
                    {
                        digits[size]='0';
                        digits[size-1]='1';
                        //最前面两个数相加需要进位的时候,在前面插入1
                        if(size==0)
                            digits.insert(digits.begin(),'1');
                        size2--;
                        size--;
                    }
                    else if((digits[size]=='1')&&(b[size2]=='0'))
                    {
                        size2--;
                        size--;
                    }
                    else
                    {
                        digits[size]=b[size2];
                        size--;
                        size2--;
                    }
                }
            }
            return digits;
        }
    };
    int main()
    {
        string b="100";
        string a="110010";
        Solution s;
        cout<<"digits: "<<s.addBinary(a,b)<<endl;
    }

     只能想到这么麻烦的方法,哎。。。

        string addBinary(string a, string b) {
            if(a.empty())
                return b;
            if(b.empty())
                return a;
            int carry=0;
            int i=a.size()-1;
            int j=b.size()-1;
            string res;
            int sum=0;
            while(i>=0&&j>=0)
            {
                sum=a[i--]-'0'+b[j--]-'0'+carry;
                if(sum>=2)
                {
                    char c=sum%2+'0';
                    res=c+res;
                    carry=1;
                }
                else
                {
                    char c=sum+'0';
                    res=c+res;
                    carry=0;
                }
            }
            while(i>=0)
            {
                sum=carry+a[i--]-'0';
                if(sum>=2)
                {
                    char c=sum%2+'0';
                    res=c+res;
                    carry=sum/2;
                }
                else
                {
                    char c=sum+'0';
                    res=c+res;
                    carry=0;
                }
            }
            while(j>=0)
            {
                sum=carry+b[j--]-'0';
                if(sum>=2)
                {
                    char c=sum%2+'0';
                    res=c+res;
                    carry=sum/2;
                }
                else
                {
                    char c=sum+'0';
                    res=c+res;
                    carry=0;
                }
            }
            if(carry==1)
                res.insert(0,"1");
            return res;
        }
  • 相关阅读:
    2-jenkins持续集成体系介绍
    第六天打卡
    第五天打卡(find用法)
    第五天打卡
    第四天打卡
    第三天打卡
    第一天:定个小目标,学习REDHAT,希望能去考下RHCE
    day12
    Python3的List操作和方法
    Python3字符串的操作
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4134608.html
Copyright © 2011-2022 走看看