如何使用BigInteger?

时间:2009-11-23 15:37:11

标签: java biginteger

我有这段代码,但是无效:

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum.add(BigInteger.valueOf(i));
    }
}

sum变量总是0.我做错了什么?

9 个答案:

答案 0 :(得分:197)

BigInteger是不可变的。 javadocs声明add()“[r] eturns一个BigInteger,其值为(this + val)。”因此,您无法更改sum,您需要将add方法的结果重新分配给sum变量。

sum = sum.add(BigInteger.valueOf(i));

答案 1 :(得分:56)

sum = sum.add(BigInteger.valueOf(i))

BigInteger类是不可变的,因此您无法更改其状态。所以调用“add”会创建一个新的BigInteger,而不是修改当前的。{/ p>

答案 2 :(得分:20)

其他回复已经钉了它; BigInteger是不可变的。这是使代码有效的微小变化。

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum = sum.add(BigInteger.valueOf(i));
    }
}

答案 3 :(得分:11)

java.math.BigInteger不可变类,因此我们无法在已分配对象的位置分配新对象。但是您可以创建新对象来分配新值,如:

sum = sum.add(BigInteger.valueOf(i));

答案 4 :(得分:10)

BigInteger是一个不可变的类。因此,无论何时进行任何算术运算,都必须将输出重新分配给变量。

答案 5 :(得分:3)

是的,它是不变的

sum.add(BigInteger.valueOf(i));

所以BigInteger类的方法add()不会将新的BigIntger值添加到它自己的值,但创建并返回一个新的BigInteger引用而不更改当前的BigInteger和这是什么甚至在字符串

的情况下完成

答案 6 :(得分:0)

实际上你可以使用,

selectedBackgroundView

用于为BigInteger类创建对象。但问题是,你不能在双引号中给出一个变量。所以我们必须使用 valueOf()方法,我们必须存储答案在那个总和中。所以我们会写,

BigInteger sum= new BigInteger("12345");

答案 7 :(得分:0)

Biginteger是一个不可变的类。 您需要将输出的值明确指定为总和,如下所示:

sum = sum.add(BigInteger.valueof(i));    

答案 8 :(得分:-6)

由于您总结了一些int值,因此无需使用BigInteger。 long就足够了。 int是32位,而long是64位,可以包含所有int值的总和。