如何使用 BigInteger?

我有一段代码,但是没有用:

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

Sum 变量总是0。我做错了什么?

342993 次浏览
sum = sum.add(BigInteger.valueOf(i))

BigInteger类是不可变的,因此您不能更改它的状态。因此,调用“ add”将创建一个新的 BigInteger,而不是修改当前。

BigInteger是不可变的。Javadocs 指出,添加()“[ r ]返回一个 BigInteger,其值为(this + val)因此,您不能更改 sum,您需要将 add方法的结果重新分配给 sum变量。

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

BigInteger 是一个不可变的类,所以无论你做什么运算,你都必须把输出重新分配给一个变量。

其他回复已经说明了这一点; BigInteger 是不可变的。

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

java.math.BigInteger是一个 永恒不变类,因此我们不能在已分配对象的位置分配新对象。但是您可以创建新对象来赋予新值,比如:

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

因为要将一些 int 值相加,所以没有必要使用 BigInteger。long就足够了。int是32位,而 long是64位,它可以包含所有 int 值的和。

是的,它是永恒的

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

因此 BigInteger 类的 add ()方法不会向自己的值中添加新的 BigIntger 值,而是在不更改当前 BigInteger 和 即使在 String 的情况下也是这样做的的情况下添加 创建并返回一个新的 BigInteger 引用

其实你可以用,

BigInteger sum= new BigInteger("12345");

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

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

Biginteger是一个不可变的类。 您需要将输出的值显式赋值为如下所示的和:

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

假设有时我们的输入值太大,无法存储整数值,例如123456789123456789 在这种情况下,像 long 这样的标准数据类型无法处理它。但是 Java 提供了一个类“ BigInteger”。它帮助我们传递和获取巨大的价值。 请参阅下面的考试来理清这个概念。

import java.io.*;
import java.math.BigInteger;
import java.util.*;


public class Solution {


public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
BigInteger B1=new BigInteger("10");
BigInteger B2=new BigInteger("20");
B1=sc.nextBigInteger();
B2=sc.nextBigInteger();
Solution obj=new Solution();
obj.Big_Int(B1,B2);
sc.close();
}
    

public void Big_Int(BigInteger a,BigInteger b)
{
//BigInteger bi=new BigInteger("1");
BigInteger bi=BigInteger.TEN;
bi=a;
bi=bi.add(b);
System.out.println(bi);
bi=a;
bi=bi.multiply(b);
System.out.println(bi);
        

}
}

输入: 123456789123456789 1578426354785

产出: 123458367549811574 194867449629598334799730885365