用于将bigInteger转换为整数的intValue()方法给出了错误的结果

时间:2015-04-10 09:16:56

标签: java biginteger

static BigInteger []fact = new BigInteger[1000003];

此数组包含0到1000003之间的整数因子

我将X作为BigInteger变量来自模运算

 while(m.compareTo(BigInteger.valueOf(0)) == 1 ||  n.compareTo(BigInteger.valueOf(0)) == 1){

        if(m.compareTo(BigInteger.valueOf(0)) == 1 || m.compareTo(BigInteger.valueOf(0)) == 0)
        {
            x = m.mod(mod);
            m = m.divide(mod);

        }

现在,当我尝试“事实[X]”时,它在“事实[X]”中给出了这个错误:

 BigInteger cannot be converted to int
        temp = (fact[x].multiply(fact[(x.subtract(y)).intValue()])).mod(mod);

将X更改为X.intValue()后,X的值变为。

我如何访问事实[X]? 帮助!!

2 个答案:

答案 0 :(得分:1)

您必须区分BigIntegerintIntegerBigIntegerint之间没有自动转换(自动装箱/取消装箱)。此外,对象数组的维度始终为int。然后,每次要访问BigInteger数组中的元素时,都必须将索引值显式转换为int,这可以通过调用BigInteger#intValue()来完成。 我试图评论您的代码,假设xy计算没有问题 请注意,BigInteger数组在创建时仅包含null 引用。这意味着您需要在尝试对其执行某些操作之前创建并设置数组元素。

final int max = 1000003;
BigInteger [] fact = new BigInteger[max];
BigInteger mod = BigInteger.valueOf(max);
BigInteger x = ...; // computed somewhere
BigInteger y = ...; // computed somewhere

BigInteger temp = 
   fact[x.intValue()]          // x is a BI, take intValue() to access array element
     .multiply(                // operands are BI
        fact[x.subtract(y)     // operands are BI
                 .intValue()]) // take intValue() to access array
                    .mod(mod); // operands are BI, result is BI  

答案 1 :(得分:0)

数组索引应为整数。如果您使用fact[X],那么X必须整数而不是BigInteger

如果xyBigInteger

,请更改此逻辑
 temp = (fact[x].multiply(fact[(x.subtract(y)).intValue()])).mod(mod);

 temp = (fact[x.intValue()].multiply(fact[(x.subtract(y)).intValue()])).mod(mod);