如何使用BigInteger?

问题描述 投票:0回答:11

我有这段代码,但不起作用:

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

sum 变量始终为 0。我做错了什么?

java biginteger
11个回答
207
投票

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

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

58
投票
sum = sum.add(BigInteger.valueOf(i))

BigInteger
类是不可变的,因此你无法改变它的状态。因此,调用“add”会创建一个新的
BigInteger
,而不是修改当前的。


23
投票

其他回复已经解决了; BigInteger 是不可变的。这是使该代码正常工作的小改动。

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

12
投票

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


12
投票

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

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

4
投票

是的,它是不可变的

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

因此 BigInteger 类的方法 add() 不会将新的 BigInteger 值添加到其自己的值中,而是 创建并返回一个新的 BigInteger 引用,而不更改当前的 BigInteger 即使在字符串的情况下也是如此


0
投票

其实可以用,

BigInteger sum= new BigInteger("12345");

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

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

0
投票

Biginteger
是一个不可变的类。 您需要将输出的值显式分配给 sum,如下所示:

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

0
投票

假设有时我们的输入值太大而无法存储整数值,例如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


0
投票

漂亮的一个,在我们眼中非常好,是那个 漂亮的一个,在我们眼中,非常好,是那个 那个漂亮,在我们眼中,非常好,是tuo 很好看,在我们眼中非常好,是 the tuo 一样 很好看,在我们眼中非常好,是 the tuo 很好看,在我们眼中非常好眼睛就是就是坨


-6
投票

由于您正在将一些 int 值相加,因此无需使用 BigInteger。

long
就足够了。
int
是32位,而
long
是64位,可以包含所有int值的总和。

© www.soinside.com 2019 - 2024. All rights reserved.