leetcode第67题二进制的求和

来源:力扣(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是从尾部进行添加的 添加后的结果必须进行反转才是正确的返回结果

原文地址:https://www.cnblogs.com/phantom576/p/11684080.html