如何使用大整数?
我有这段代码,它不起作用:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
sum 变量始终为 0。我做错了什么?
I have this piece of code, which is not working:
BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
if (isPrim(i)) {
sum.add(BigInteger.valueOf(i));
}
}
The sum variable is always 0. What am I doing wrong?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
BigInteger 是不可变的。 javadocs 指出 add() “[r]返回一个 BigInteger,其值为 (this + val)。”因此,您无法更改
sum
,您需要将add
方法的结果重新分配给sum
变量。BigInteger
is immutable. The javadocs states that add() "[r]eturns a BigInteger whose value is (this + val)." Therefore, you can't changesum
, you need to reassign the result of theadd
method tosum
variable.BigInteger 类是不可变的,因此您无法更改其状态。因此,调用“add”会创建一个新的 BigInteger,而不是修改当前的 BigInteger。
The
BigInteger
class is immutable, hence you can't change its state. So calling "add" creates a newBigInteger
, rather than modifying the current.其他回复已经指出了这一点; BigInteger 是不可变的。这是使该代码正常工作的微小更改。
Other replies have nailed it; BigInteger is immutable. Here's the minor change to make that code work.
BigInteger 是一个不可变的类。因此,每当您进行任何算术运算时,都必须将输出重新分配给变量。
BigInteger is an immutable class. So whenever you do any arithmetic, you have to reassign the output to a variable.
java.math.BigInteger
是一个不可变类,因此我们不能在已分配对象的位置分配新对象。但是您可以创建新对象来分配新值,例如:java.math.BigInteger
is an immutable class so we can not assign new object in the location of already assigned object. But you can create new object to assign new value like:是的,它是不可变的
,因此 BigInteger 类的方法 add() 不会将新的 BigInteger 值添加到其自己的值中,但是创建并返回一个新的 BigInteger 引用而不更改当前的 BigInteger 并且这就是什么即使在字符串的情况下也可以完成
Yes it's Immutable
so the method add() of BigInteger class does not add new BigIntger value to its own value ,but creates and returns a new BigInteger reference without changing the current BigInteger and this is what done even in the case of Strings
Biginteger 是一个不可变的类。
您需要将输出的值显式分配给 sum,如下所示:
Biginteger
is an immutable class.You need to explicitly assign value of your output to sum like this:
假设有时我们的输入值太大而无法存储整数值,例如123456789123456789
在这种情况下,像 long 这样的标准数据类型就无法处理它。但是Java提供了一个类“BigInteger”。它帮助我们传递和获取巨大的价值。
请参阅下面的考试以明确概念。
输入:
123456789123456789
1578426354785
输出:
123458367549811574
194867449629598334799730885365
Suppose sometimes our input value is too big to store integer value eg.123456789123456789
In that case, standard datatype like long can't handle it. But Java provides a class "BigInteger". It helps us to pass and access huge value.
Please see the below exam to clear the concept.
input:
123456789123456789
1578426354785
output:
123458367549811574
194867449629598334799730885365
实际上你可以使用,
为 BigInteger 类创建对象。但是这里的问题是,你不能在双引号中给出变量。所以我们必须使用 valueOf() 方法,并且我们必须存储再次得出该总和的答案。所以我们会写,
Actually you can use,
for creating object for BigInteger class.But the problem here is,you cannot give a variable in the double quotes.So we have to use the valueOf() method and we have to store the answer in that sum again.So we will write,
由于您正在将一些 int 值相加,因此无需使用 BigInteger。
long
就足够了。int
是 32 位,而long
是 64 位,可以包含所有 int 值的总和。Since you are summing up some int values together, there is no need to use BigInteger.
long
is enough for that.int
is 32 bits, whilelong
is 64 bits, that can contain the sum of all int values.