Estoy tratando de agregar 2 cadenas binarias pero obtengo el resultado en Unicode

Entrada: "11""1"

Salida: "\u0001\u0000\u0000"

Quiero mi respuesta como 100

class Solution {
    public String addBinary(String a, String b) {
        String ans=new String();
        int i=a.length()-1;
        int j=b.length()-1;
        int carry=0;
        while(i>=0 || j>=0 || carry==1){
            int add=carry;
            if(i>=0) add+=a.charAt(i)-'0';
            if(j>=0) add+=b.charAt(j)-'0';
            ans=(char)(add%2)+ans;
            carry=add/2;
            i--;
            j--;
        }
        return ans;    
    }
}
0
dp786 20 jul. 2020 a las 00:21

3 respuestas

La mejor respuesta

Agregar al comienzo de otra parte de cadena no es correcto. necesitas usar ans="" + (add%2) + ans;

public String addBinary(String a, String b) {
    String ans="";
    int i=a.length()-1;
    int j=b.length()-1;
    int carry=0;
    
    while(i>=0 || j>=0 || carry==1){
        int add=carry;
        if(i>=0) add+=a.charAt(i)-'0';
        if(j>=0) add+=b.charAt(j)-'0';
        ans="" + (add%2) + ans;
        carry=add/2; 
        i--;
        j--;
    }
    
    System.out.print("ans=" +  ans);
    return ans;    
}

https://ideone.com/sn709k

0
roottraveller 19 jul. 2020 a las 21:44

Okay. Analice los dos String (s) y agregue los valores. Devuelve el resultado como String de dígitos binarios. Y lo convertiría en un método static. Me gusta,

public static String addBinary(String a, String b) {
    return Integer.toBinaryString(Integer.parseInt(a, 2)
            + Integer.parseInt(b, 2));
}

public static void main(String[] args) {
    System.out.println(addBinary("1", "11"));
}

Salidas (según lo solicitado)

100
1
Elliott Frisch 19 jul. 2020 a las 21:29

Una vez que haya descubierto el valor que se agregará a su cadena de resultados, debe convertir el valor binario (0, 1, ...) a un carácter ('0', '1', ...).

Éste:

ans=(char)(add%2)+ans;

Debería ser esto:

ans = (char)((add%2) + '0') + ans;
0
user13784117 19 jul. 2020 a las 21:28