java中接受2个二进制数并返回其总和的最短代码是什么?

时间:2015-01-15 18:16:38

标签: java binary

我需要添加两个二进制数并返回总和。不允许进行基本转换。我知道使用数组的长方法。但有什么更短的吗?而缩短我的意思是“代码长度更短”。提前谢谢。

如果我不够明确,这是一个例子:

输入:

1101

11

输出:10000

3 个答案:

答案 0 :(得分:1)

两个(二进制)整数ab的总和可以计算为a+b,因为所有算术都是以二进制形式完成的。

如果您的输入是人类可读的字符串而不是二进制,您可以使用标准的BigInteger类计算它们的二进制和:

import java.math.BigInteger;

String sum(String a, String b) {
    return new BigInteger(a, 2).add(new BigInteger(b, 2)).toString(2);
}

答案 1 :(得分:0)

将二进制数表示为两个字符串。反转两个字符串。然后,您可以同时迭代两个字符串,将值添加到三个数组中,两个表示从字符串添加的二进制数字,第三个表示进位数字。创建表示答案的第四个数组(您可能必须找到答案可能长度的限制)。

使用标准二进制添加填充答案数组:

0 + 0 = 0 in the same position, 
1 + 0 = 0 + 1 = 1 in the same position, 
1 + 1 = 0 in the same position, and carry a 1 to the next position, 
1 + 1 + 1 = 1 in the same position, and carry a 1 to the next position.

反转数组,您将得到答案作为二进制数。

答案 2 :(得分:0)

以下是一些选项,不使用Java提供的任何实用程序方法。这些不考虑符号(前导+/-),因此它们只处理整数。

第一种方法将二进制字符串转换为整数,添加整数,然后将结果转换回二进制。它使用方法本地内部类Convert来避免为每个参数复制binaryToInt()代码。

    static String binaryAdd1(String binary1, String binary2) {
        class Convert {
            int binaryToInt(String binary) {
                int result = 0;
                for (int i = 0; i < binary.length(); i++) {
                    char c = binary.charAt(i);
                    result *= 2;
                    if (c == '1') {
                        result++;
                    } else if (c != '0') {
                        throw new IllegalArgumentException(binary);
                    }
                }
                return result;
            }
        }
        final Convert convert = new Convert();
        int int1 = convert.binaryToInt(binary1);
        int int2 = convert.binaryToInt(binary2);

        String result = "";
        int temp = int1 + int2;
        do {
            result = ((temp & 1) == 1 ? '1' : '0') + result;
            temp >>= 1;
        } while (temp > 0);
        return result;
    }

第二种方法使用二进制加法逻辑,如JHaps在他的回答中所指定的,直接将两个参数加在一起。这里没有中间转换为整数。

    static String binaryAdd2(String binary1, String binary2) {
        final String validDigits = "01";
        String binarySum = "";

        // pad the binary strings with one more significant digit for carrying
        String bin1 = '0' + binary1;
        String bin2 = '0' + binary2;

        // add them together starting from least significant digit
        int index1 = bin1.length() - 1;
        int index2 = bin2.length() - 1;
        boolean carry = false;
        while (index1 >= 0 || index2 >= 0) {
            char char1 = bin1.charAt(index1 >= 0 ? index1 : 0);
            char char2 = bin2.charAt(index2 >= 0 ? index2 : 0);
            if (validDigits.indexOf(char1) < 0)
                throw new NumberFormatException(binary1);
            if (validDigits.indexOf(char2) < 0)
                throw new NumberFormatException(binary2);
            if (char1 == char2) {
                binarySum = (carry ? '1' : '0') + binarySum;
                carry = char1 == '1';
            } else {
                binarySum = (carry ? '0' : '1') + binarySum;
            }
            index1--;
            index2--;
        }
        if (binarySum.length() > 1 && binarySum.charAt(0) == '0') {
            binarySum = binarySum.substring(1);
        }
        String result = binarySum.toString();
        return result;
    }