输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
数据范围: 
输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**
* @param a = "1101"
* @param b = "1100"
* @return "11001"
*/
public String add(String a, String b){ }
输入两个字符串,如"1101", "1100"
"11001"
1101 1100
11001
0 1
1
import java.util.*;
//二进制的加法
public class Main3 {
public static void main(String[] args){
Scanner sca = new Scanner(System.in);
String[] str = sca.nextLine().split(" ");
String a = str[0];
String b = str[1];
System.out.println(addBinary(a,b));
}
public static String addBinary(String a, String b) {
StringBuilder sb = new StringBuilder();
int aLen = a.length();
int bLen = b.length();
int max = Math.max(aLen, bLen);
StringBuilder ar = new StringBuilder(a).reverse();//反转,因为两个数从低位开始相加
StringBuilder br = new StringBuilder(b).reverse();
boolean isCarry = false;//是否进位
for (int i = 0; i < max; i++) {
char aChar = i >= aLeng ? '0' : ar.charAt(i);
char bChar = i >= bLen ? '0' : br.charAt(i);
if (aChar == '1' && bChar == '1') {
sb.append(isCarry ? '1' : '0');
isCarry = true;
} else if (aChar == '0' && bChar == '0') {
sb.append(isCarry ? '1' : '0');
isCarry = false;
} else {
sb.append(isCarry ? '0' : '1');
}
}
if (isCarry) sb.append("1");
return sb.reverse().toString();
}
} 二进制转十进制,可以利用公式转换
十进制转二进制,忘了,直接调用Integer中的静态方法toBinaryString()
import java.util.*;
public class Main
{
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
String str1=sc.next();
String str2=sc.next();
int r=getResult(str1)+getResult(str2);
String result=Integer.toBinaryString(r);
System.out.println(result);
}
}
public static int getResult(String str)
{
int sum=0;
for(int i=0;i<str.length();i++)
{
char s=str.charAt(i);
String ss=""+s;
int num=Integer.parseInt(ss);
sum+=num*Math.pow(2,str.length()-i-1); //根据二进制转十进制的公式
}
return sum;
}
}