来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-binary
给定两个二进制字符串,返回他们的和(用二进制表示)。
输入为非空字符串且只包含数字 1 和 0。
示例 1:
输入: a = "11", b = "1"
输出: "100"
示例 2:
输入: a = "1010", b = "1011"
输出: "10101"
这里的难点也就是考虑进位的问题 首先 两者的长度可能不相同 我们必须在短的字符串前面添加0
另外 需要从尾部进行遍历相加 相加结果对2进行取余 就是该位的结果 对2进行整除 那么就是进位
如果产生进位 进位的值需要加到前一位 最后需要判断第一位的进位是不是为1 如果是1的话 那么
还需要添加1
import java.util.Scanner;
public class AddBinaryDemo67 {
public static String addBinary(String a, String b){
StringBuilder sb = new StringBuilder();
int len_a = a.length();
int len_b = b.length();
int carry = 0;
for(int i=len_a-1, j=len_b-1; i>=0||j>=0; i--,j--){
int sum = carry;
if(i>=0){
sum+=a.charAt(i)-'0';
}else{
sum+=0;
}
if(j>=0){
sum+=b.charAt(j)-'0';
}else{
sum+=0;
}
sb.append(sum%2);
carry=sum/2;
}
if(carry==1){
sb.append(1);
}else{
sb.append("");
}
return sb.reverse().toString();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
String[] str1 = str.split(" ");
String a = str1[0];
String b = str1[1];
String res = addBinary(a, b);
System.out.println(res);
}
}
//这里说明一下为什么这里会需要进行反转 因为append是从尾部进行添加的 添加后的结果必须进行反转才是正确的返回结果