You need to enable JavaScript to run this app. Java将long数组转为BigInteger支持大数输出及返回0异常修复方法
优惠活动
大模型
产品
解决方案
定价
更多

Java将long数组转为BigInteger支持大数输出及返回0异常修复方法

问题排查与修复方案

核心问题点

  • BigInteger操作逻辑错误

BigInteger为不可变类,所有算术运算方法都不会修改原对象,只会返回运算后的新对象。你原有代码中的ways.add(xxx)没有接收返回值,ways变量始终保持初始的BigInteger.ZERO,是输出为0的核心原因。

  • 边界判断参数颠倒

原long版本的边界规则为a > A返回0、b >= B返回1,调整后的代码错误将判断条件改为a > B返回0、b >= A返回1,逻辑完全颠倒。

  • 数组维度与参数范围不匹配

原long版本dp数组维度为[A+1][B+5][C],对应参数a的最大取值为A、b的最大取值为B+4;调整后的代码将dp和supportDP数组的维度写反,会导致逻辑异常甚至数组越界。

  • 缺少BigInteger导包

代码未引入java.math.BigInteger包,编译阶段就会报错。

修复后完整代码
import java.math.BigInteger;

class WaysDP_Large
{
    static int A = 3;
    static int B = 2;
    static int C = 2;

    static boolean[][][] supportDP = new boolean[A+1][B+5][C];

    static BigInteger CountWays(int a, int b, int c, BigInteger [][][]dp)
    {
        if (a > A || c >= C) return BigInteger.ZERO;
        if (b >= B) return BigInteger.ONE;
        if (supportDP[a][b][c]) return dp[a][b][c];

        BigInteger ways = BigInteger.ZERO;
        // 接收add方法返回的新对象赋值给ways
        ways = ways.add(CountWays(a+1, b, c+1, dp));
        ways = ways.add(CountWays(a+1, b+1, c, dp));
        ways = ways.add(CountWays(a+1, b+2, c, dp));
        ways = ways.add(CountWays(a+1, b+4, c, dp));

        supportDP[a][b][c] = true;
        return dp[a][b][c] = ways;
    }

    public static void main(String[] args)
    {
        BigInteger[][][] dp = new BigInteger[A+1][B+5][C];
        // 初始化标记数组
        for(int i = 0; i < A+1; i++)
            for(int j = 0; j < B+5; j++)
                for(int k = 0; k < C; k++) supportDP[i][j][k] = false;

        System.out.println(CountWays(0, 0, 0, dp));
    }
}

验证结果

修改后:

  • 当参数A=3、B=2、C=2时,输出为13,符合预期
  • 当参数A=3、B=4、C=3时,输出为20,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:39:03