大整数计算问题

时间:2010-05-06 05:48:42

标签: java

我使用以下代码,但参数未传递给方法。

BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l);

在这个g1中,l是长值。

方法是

private BigInteger bigi_calc(long g1, long l){           

        BigInteger cal = BigInteger.valueOf(g1);
        BigInteger cal1= BigInteger.valueOf(l);
        for(BigInteger f = BigInteger.ONE;f.compareTo(cal1)>0;f=f.add(BigInteger.ONE)){
            //BigInteger p= BigInteger.valueOf(0);
            p = cal.multiply(cal1);
            System.out.println("check p"+p);
        }
    //  System.out.println("check p"+p);
        return p;
    }

elipse显示它可能不同步,但参数不会传递给函数。 能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您是否将BigInteger p = BigInteger.valueOf(0);声明为bigi_calc之外的本地变量?因为在这种情况下,p的范围不会延伸到方法bigi_calc

您可能想要:

  • p作为第三个参数传递
  • 将其设为会员字段

要做第一个选项,你可以这样做:

private BigInteger bigi_calc(long g1, long l, BigInteger p) { ... }

//...
BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l, p);

检查代码进一步表明它没有任何意义。如果您正在尝试计算,则会有一个BigInteger.pow。如果循环计数器不会超过BigInteger,则使用long只是不必要的混乱。

如果pow(long base, long exp)符合您的要求,并且由于某种原因您不能使用BigInteger.pow,那么您可以这样写:

static BigInteger pow(long base, long exp){              
    BigInteger result = BigInteger.ONE;
    BigInteger biBase = BigInteger.valueOf(base);
    for (long i = 0; i < exp; i++) {
        result = result.multiply(biBase);
    }
    return result;
}