方法1
对于Java和python的高精度功能,可以将二进制转化为十进制,计算完后,在转化成二进制。使用的函数有Integer.parseInt(s)的作用就是把字符串s解析成有符号的int基本类型。toBinaryString(int i)方法,此方法返回int变量的二进制表示的字符串。
class solution03 {
public String addBinary(String a,String b){
int i = Integer.parseInt(a)+Integer.parseInt(b);
return Integer.toBinaryString(i);
}
}
但是在java中,对于长度较长的字符串是会有限制的。
方法二
class Solution {
public String addBinary(String a, String b) {
//步骤1,补齐两个字符串
int m = a.length();
int n = b.length();
String attach = "";
if(m<n){
for(int i = 0; i<n-m; i++){
attach += "0";
}
a = attach+a;//注意这里是补的0在前面,否则1补零后为10,而不是01,导致计算结果出错
m = n;
}else if(m>n){
for(int i = 0; i<m-n; i++){
attach += "0";
}
b = attach+b;//这里也跟上面一样,是attach+b,而不是b+attach
}
//计算
int carry = 0;//标志着进位
StringBuilder sb = new StringBuilder();
//从最低位开始计算
for(int j = m-1;j >=0;j--){
int ai = a.charAt(j) == '0'? 0:1;
int bi = b.charAt(j) == '0'? 0:1;
int cur = (ai+bi+carry)%2;//当前位
carry = (ai+bi+carry)/2;//进位
sb.append(cur);
}
if(carry == 1){
sb.append(carry);//最高位仍有进位时,需添加
}
return sb.reverse().toString();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)