二进制之和问题 | 豆包MarsCode AI刷题

52 阅读2分钟

需要将两个二进制字符串相加,并以十进制的形式返回结果。由于二进制字符串可能非常长,常规的方法可能无法处理大数,因此我们需要设计一个算法,确保时间复杂度不超过 O(n^2)。

二进制到十进制的转换公式 二进制数转换为十进制数的公式是:

[ \text{十进制数} = \sum_{i=0}^{n-1} \text{二进制数}[i] \times 2^i ]

其中:

(\text{二进制数}[i]) 是二进制字符串中第 (i) 位的值(0 或 1)。 (n) 是二进制字符串的长度。 转换方法 方法1:使用 Integer.parseInt Java 提供了 Integer.parseInt 方法,可以直接将二进制字符串转换为十进制整数。 方法2:使用 BigInteger 对于非常大的二进制字符串,可以使用 BigInteger 类来处理 数据结构选择 由于二进制字符串可能非常长,直接使用整数类型(如 int 或 long)可能会导致溢出。因此,我们可以考虑使用 BigInteger 来处理大数,或者直接在二进制字符串上进行加法操作。

算法步骤 使用 BigInteger 处理大数:

将二进制字符串转换为 BigInteger。 将两个 BigInteger 相加。 将结果转换为十进制字符串。 直接在二进制字符串上进行加法操作:

从两个二进制字符串的最低位(最右边)开始,逐位相加,并处理进位。 将结果存储在一个新的字符串中。 最后将结果字符串转换为十进制字符串 使用 BigInteger:这种方法简单直接,适合处理非常大的二进制字符串。 直接在二进制字符串上进行加法:这种方法避免了转换为十进制整数的过程,直接在二进制字符串上进行操作,适合处理非常大的二进制字符串。

    public static String solution(String binary1, String binary2) {
        // 将二进制字符串转换为十进制整数
        int decimal1 = Integer.parseInt(binary1, 2);
        int decimal2 = Integer.parseInt(binary2, 2);
        
        // 将两个十进制整数相加
        int sum = decimal1 + decimal2;
        
        // 将结果转换回字符串
        return String.valueOf(sum);
    }

    public static void main(String[] args) {
        // 你可以添加更多测试用例
        System.out.println(solution("101", "110").equals("11"));
        System.out.println(solution("111111", "10100").equals("83"));
        System.out.println(solution("111010101001001011", "100010101001").equals("242420"));
        System.out.println(solution("111010101001011", "10010101001").equals("31220"));
    }
}