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]? 帮助!!
答案 0 :(得分:1)
您必须区分BigInteger
和int
或Integer
。 BigInteger
和int
之间没有自动转换(自动装箱/取消装箱)。此外,对象数组的维度始终为int
。然后,每次要访问BigInteger
数组中的元素时,都必须将索引值显式转换为int
,这可以通过调用BigInteger#intValue()
来完成。
我试图评论您的代码,假设x
和y
计算没有问题
请注意,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
如果x
和y
为BigInteger
temp = (fact[x].multiply(fact[(x.subtract(y)).intValue()])).mod(mod);
到
temp = (fact[x.intValue()].multiply(fact[(x.subtract(y)).intValue()])).mod(mod);