[英]How to use BigInteger?
我有这段代码,它不起作用:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
sum 变量始终为 0。我做错了什么?
BigInteger
是不可变的。 javadocs 声明add() “[r] 返回一个 BigInteger,其值为 (this + val)。” 因此,您无法更改sum
,您需要将add
方法的结果重新分配给sum
变量。
sum = sum.add(BigInteger.valueOf(i));
sum = sum.add(BigInteger.valueOf(i))
BigInteger
类是不可变的,因此您无法更改其状态。 所以调用“add”会创建一个新的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));
BigInteger 是一个不可变的类。 因此,无论何时进行任何算术运算,都必须将输出重新分配给变量。
是的,它是不可变的
sum.add(BigInteger.valueOf(i));
因此 BigInteger 类的方法 add() 不会将新的 BigIntger 值添加到它自己的值中,而是在不更改当前 BigInteger 的情况下创建并返回一个新的 BigInteger 引用,即使在 Strings 的情况下也是如此
其实可以用
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
由于您将一些 int 值汇总在一起,因此无需使用 BigInteger。 long
就足够了。 int
是 32 位,而long
是 64 位,可以包含所有 int 值的总和。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.