You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两个大型二进制字符串相加?Java是否有内置函数可用?

问题分析与解决方案

错误原因

你用Integer.parseInt()处理大型二进制字符串时出错,核心原因是Integer类型的范围限制:Java的int是32位有符号整数,最大值为2^31-1(对应二进制31位),当二进制字符串长度超过31位时,转换会直接抛出NumberFormatException,或者因溢出得到错误结果。

解决方案

方案一:使用BigInteger(Java内置方案)

Java的java.math.BigInteger类专门用于处理任意大小的整数,完全适配超长二进制字符串的需求。它提供了直接解析二进制字符串、执行加法、转换回二进制字符串的方法,代码简洁高效:

class Solution {
    public String addBinary(String a, String b) {
        BigInteger numA = new BigInteger(a, 2);
        BigInteger numB = new BigInteger(b, 2);
        BigInteger sum = numA.add(numB);
        return sum.toString(2);
    }
}

方案二:手动实现二进制加法(底层逻辑实现)

如果不想依赖BigInteger,可以模拟竖式加法的过程,从两个字符串的末尾逐位计算,处理进位:

class Solution {
    public String addBinary(String a, String b) {
        StringBuilder result = new StringBuilder();
        int i = a.length() - 1;
        int j = b.length() - 1;
        int carry = 0;

        // 循环处理所有位,直到没有剩余位且无进位
        while (i >= 0 || j >= 0 || carry != 0) {
            // 获取当前位的数值,超出范围则取0
            int digitA = i >= 0 ? a.charAt(i) - '0' : 0;
            int digitB = j >= 0 ? b.charAt(j) - '0' : 0;
            
            // 计算当前位总和
            int total = digitA + digitB + carry;
            // 当前位结果取模2
            result.append(total % 2);
            // 更新进位
            carry = total / 2;
            
            // 指针左移
            i--;
            j--;
        }

        // 因为是从末尾开始添加,需要反转得到正确顺序
        return result.reverse().toString();
    }
}

方案选择

  • 优先用BigInteger:代码简洁,无需手动处理进位,适合大多数场景;
  • 手动实现:适合理解二进制加法的底层逻辑,或者在禁止使用BigInteger的场景下使用。

内容的提问来源于stack exchange,提问作者Sai Krishna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:42:05