福利:这是我的个人IT资源网站,所有资源都免费,注册登录后就可以看到密码,需要什么大家尽情选取!
题目:输入两个表示二进制的字符串,请计算它们的和,并以二进制字符串的形式输出。例如,输入的二进制字符串分别是"11"和"10",则输出"101"。
public static void main(String[] args) {
System.out.println(addBinary("111111011","1010011"));
}
public static String addBinary(String a, String b){
StringBuilder result = new StringBuilder();
int i = a.length() - 1;
int j = b.length() - 1;
int carry = 0;//记录相加后是否满二进一,保存进上来的值,用于下一位计算
while(i >= 0 || j >= 0){
int digitA = i >= 0 ? a.charAt(i--) - '0' : 0; //将字符转换成int,右对齐相加,所以倒序循环
int digitB = j >= 0 ? b.charAt(j--) - '0' : 0;
int sum = digitA + digitB + carry;
carry = sum >= 2 ? 1 : 0;
sum = sum >= 2 ? sum - 2 : sum;//判断满二进一后的该位上的余值
result.append(sum);//将余值拼接
}
if(carry == 1){//循环结束,如果carry保存的进上来的值为1,则拼接
result.append(1);
}
return result.reverse().toString();//将拼接字符串反转,得到的就是相加的二进制数
}