首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >biginteger计算问题

biginteger计算问题
EN

Stack Overflow用户
提问于 2010-05-06 05:48:42
回答 1查看 1.8K关注 0票数 0

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

代码语言:javascript
复制
BigInteger p = BigInteger.valueOf(0);
BigInteger u1 = obj.bigi_calc(g1, l);

在这个g1中,我是长值。

方法是

代码语言:javascript
复制
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;
    }

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

EN

回答 1

Stack Overflow用户

发布于 2010-05-06 05:52:26

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

你可以选择:

  • Pass p作为第三个参数
  • 使其成为成员字段

要做第一个选择,您可以这样做:

代码语言:javascript
复制
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,那么您可以这样编写它:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2778734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档