簡體   English   中英

如何使用大整數?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM