3

重複の可能性:
BigInteger の難しさ

import java.math.BigInteger;  
public class KillerCode{  
    public static void main(String[]args){  
        BigInteger sum=null;  
        for(int i=1;i<=1000;i++){        
            sum=sum+Math.pow(i, i);  
            System.out.println(sum);     
        }    
    }  
} 

このコードを実行しようとすると、次のエラー メッセージが表示されます。

演算子 + は、引数の型 BigInteger,double に対して定義されていません。

どうすればこれを解決できますか? ありがとうございました。

4

4 に答える 4

6

BigIntegers で一般的な数学演算子を使用することはできません。ここを確認してくださいhttp://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

使用する必要がありますBigInteger.add(your numbers here)

さらなる説明、

sum = sum.add(new BigInteger(i).pow(i));
于 2012-10-15T03:22:46.333 に答える
3

sumは整数ではなく、オブジェクトへの参照であるため、実行できません。

C++ とは異なり、Java では演算子のオーバーロードが許可されていないため、クラス メソッドを使用して操作を実行する必要があります。

于 2012-10-15T03:25:20.397 に答える
1
  1. sum意味のある非値に初期null化します (現在は に初期化しますnull):

    BigInteger sum = BigInteger.ZERO;
    

    それ以外の式

    sum = sum.add(...)
    

    意味がありません(必要ない限りNullPointerException)。

  2. 静的ファクトリBigInteger.valueOf(long)を使用して、整数値を にマップしますBigInteger

    という表現は使用しないでくださいnew BigInteger(i)。によって呼び出されるコンストラクターは でnew BigInteger(i)ありBigInteger(byte[])、255 より大きい値 (あなたが持っている...) に対しては (あなたの目的のために) 誤った結果をもたらします。

  3. 追加で使用BigInteger.add(BigInteger)します。

  4. BigInteger.pow(int)の代わりに使用しMath.pow(int,int)ます。(大きな) 整数演算を行っているため、作業を浮動小数点の世界にマッピングするもの、つまりdoubleまたはを避けてください。そうfloatしないと、BigInteger.

于 2012-10-15T04:39:08.573 に答える
0

+BigInteger には演算子が定義されていません。ここにある Javadocによると、.add() 関数を使用して、求めている結果を得ることができます。

于 2012-10-15T03:23:19.433 に答える