题目
题解
代码
1. java代码:
/** * code67 */
import java.util.*;
public class code67 {
public static String addBinary(String a, String b) {
StringBuilder ans = new StringBuilder();
int carry = 0;
for (int i = a.length() - 1, j = b.length() - 1; i >= 0 || j >= 0; i--, j--) {
int sum = carry;
sum += (i >= 0 ? a.charAt(i) - '0' : 0);
sum += (j >= 0 ? b.charAt(j) - '0' : 0); // 判断 j >= 0 的含义是有可能两个数字长度不一致,如果 j < 0 的话则将其当做 0 来处理,否则获取其值,也就是 b.charAt(j) - '0'
ans.append(sum % 2); // sum % 2 是在做二进制取模运算,比如 sum = 2,这时候将 sum % 2 = 0 放入结果集中
carry = sum / 2; // 这里是计算进位,比如 sum = 2,carry = 1,carry表示进位的意思,满2进1
}
ans.append(carry == 1 ? carry : ""); //这一步表示是不是最后还有进位,比如 1 + 1 = 10,10前面的1就是最后留存的进位,需要将其放进去
return ans.reverse().toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
String a = sc.nextLine();
String b = sc.nextLine();
String res = addBinary(a, b);
System.out.println(res);
}
sc.close();
}
}
2. python代码:
class Solution:
def addBinary(self, a: str, b: str) -> str:
return bin(int(a, 2) + int(b, 2))[2:]