Add Binary

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

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

public String addBinary(String a,String b){
    char e = '0';
    char[] c = (a.length() >= b.length())?a.toCharArray():b.toCharArray();
    char[] d = (a.length() >= b.length())?b.toCharArray():a.toCharArray();
    
    char[] re = new char[c.length + 1];
    int rel = re.length - 1;
    
    for(int i = d.length - 1, j = c.length-1; i >= 0; i--,j--){
        if(c[j]== '0' && d[i]== '0'){
            re[rel--] = e == '0' ? '0' : '1';
            e = '0';
        }else if(c[j] == '0' && d[i] =='1'||c[j] == '1' && d[i] == '0'){
            re[rel--] = e == '0' ?'1':'0';
            e= e == '0' ? '0':'1';
        }else{
            re[rel--] = e == '0' ? '0':'1';
            e='1';
        }
    }
    
    if(c.length > d.length){
        for(int i = c.length-d.length-1; i >=0 ; i--){
            if(c[i] == '0' && e == '0'){
                re[rel--]='0';
                e='0';
            }else if(c[i] == '0' && e == '1'||c[i] == '1' && e == '0'){
                re[rel--]='1';
                e='0';
            }else{
                re[rel--]='0';
                e='1';
            }
        }
    }
    re[0] = e == '1' ? '1' : '0';
    return e == '1' ? new String(re) : new String(re).substring(1);
}

@Test
public void testAddBinary(){
    Assert.assertEquals("0",addBinary("0","0") );
    Assert.assertEquals("1",addBinary("1","0") );
    Assert.assertEquals("1",addBinary("0","1") );
    Assert.assertEquals("10",addBinary("1","1") );
    Assert.assertEquals("110",addBinary("11","11") );
    Assert.assertEquals("101",addBinary("11","10") );
    Assert.assertEquals("100",addBinary("11","1") );
    Assert.assertEquals("100",addBinary("11","1") );
    Assert.assertEquals("10000",addBinary("1111","1") );
    Assert.assertEquals("1001",addBinary("1000","1") );
    Assert.assertEquals("110111101100010011000101110110100000011101000101011001000011011000001100011110011010010011000000000"
                            , addBinary("10100000100100110110010000010101111011011001101110111111111101000000101111001110001111100001101"
                                        ,"110101001011101110001111100110001010100001101011101010000011011011001011101111001100000011011110011"));
}


思路:二进制加法


你可能感兴趣的:(算法)