我已经写了一些代码来添加两个二进制数。对于所有其他测试用例,它运行正常,但是对于此特定测试用例,它返回一个空字符串。
num()
将二进制字符串转换为整数。和bin()
将数字转换为二进制字符串。
public class Solution {
public String addBinary(String A, String B) {
long result1=num(A)+num(B);
return bin(result1);
}
public long num(String A){
long result=0;
for(int i =0;i<A.length();i++){
long num1=Character.getNumericValue(A.charAt(i));
result+=num1*(long)Math.pow(2,A.length()-1-i);
}
return result;
}
public String bin(long A){
StringBuilder sb = new StringBuilder();
while(A>0){
sb.append(A%2);
A/=2;
}
String s=sb.reverse().toString();
return s;
}
}
A : "10001100010111000101100010100110001001101010000010011010"
B : "101111000100100100111110010010101110101001100100101001111010011000000110"
Your function returned the following :
The expected returned value :
101111000100100111001010101001110100001100001010110011100100011010100000
答案 0 :(得分:1)
第二个二进制数字对于long
来说太大了,因为它有72个二进制数字,而long
仅支持最大2 64 -1的数字。因此,您将得到long
溢出,您的数字是“负”,并且while (A>0)
循环将永远不会执行。
您可以只使用long
代替BigInteger
。您可以为BigInteger
类似地实现算法,也可以仅使用其自己的二进制转换方法。
public String addBinary(String A, String B) {
return bin(num(A).add(num(B)));
}
public BigInteger num(String A) {
return new BigInteger(A, 2);
}
public String bin(BigInteger A) {
return A.toString(2);
}
当然,更有趣的方法是自己实现 actual 二进制加法器,添加并携带各个数字(作为练习的内容留给感兴趣的读者)。