Dadas dos cadenas binarias, devuelve su suma (también una cadena binaria).
Por ejemplo, a = «11», b = «1», la devolución es «100».
Solución Java
Muy simple, nada especial. Tenga en cuenta cómo convertir un carácter en un int.
public String addBinary(String a, String b) { if(a==null || a.length()==0) return b; if(b==null || b.length()==0) return a; int pa = a.length()-1; int pb = b.length()-1; int flag = 0; StringBuilder sb = new StringBuilder(); while(pa >= 0 || pb >=0){ int va = 0; int vb = 0; if(pa >= 0){ va = a.charAt(pa)=='0'? 0 : 1; pa--; } if(pb >= 0){ vb = b.charAt(pb)=='0'? 0: 1; pb--; } int sum = va + vb + flag; if(sum >= 2){ sb.append(String.valueOf(sum-2)); flag = 1; }else{ flag = 0; sb.append(String.valueOf(sum)); } } if(flag == 1){ sb.append("1"); } String reversed = sb.reverse().toString(); return reversed; } |
ACTUALIZACIÓN: podemos simplemente el método anterior.
public String addBinary(String a, String b) { StringBuilder sb = new StringBuilder(); int i=a.length()-1; int j=b.length()-1; int carry = 0; while(i>=0 || j>=0){ int sum=0; if(i>=0 && a.charAt(i)=='1'){ sum++; } if(j>=0 && b.charAt(j)=='1'){ sum++; } sum += carry; if(sum>=2){ carry=1; }else{ carry=0; } sb.insert(0, (char) ((sum%2) + '0')); i--; j--; } if(carry==1) sb.insert(0, '1'); return sb.toString(); } |