此特定测试用例如何返回空字符串

时间:2019-06-19 09:27:51

标签: java

我已经写了一些代码来添加两个二进制数。对于所有其他测试用例,它运行正常,但是对于此特定测试用例,它返回一个空字符串。

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

1 个答案:

答案 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 二进制加法器,添加并携带各个数字(作为练习的内容留给感兴趣的读者)。