题目:
输入两个表示二进制的字符串,请计算它们的和,并以二进制字符串的形式输出。例如,输入的二进制字符串分别是"11"和"10",则输出”101”.
分析:
-
如果直接将二进制转换成十进制的会有溢出的风险,所以我们直接对字符串进行操作
代码实现:
public String addBinary(String a,String b){
StringBuilder result=new StringBuilder();//创建了一个StringBuilder类
int i=a.length()-1;//i等于a的长度减一
int j=b.length()-1;//j等于b的长度减一
int carry=0;//进的数
while(i>=0||j>=0){
int digitA=i>=0?a.charAt(i--)-'0':0;//如果有数,则减去'0',如果没有数补上0
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){
result.append(1);//如果如果退出循环但是还没进一的话就添加一个一到开头
}
return result.reverse().toString();//将结果反转并且转成字符串
}