-2
Sum(N) =1^1+2^2+3^3+...+N^N

BigIntegerJava を使用して、Sum(N) の値が 10^20 より大きい最小の整数 N を見つけるにはどうすればよいですか? 本当に困っています アドバイスお願いします

これは私がこれまでに持っているものです:

import java.math.BigInteger;
public class PROJECTV1 {
    public static void main(String [] args) {
        BigInteger bResult= bigFunctionExample_2();
        System.out.println(" => result_got:"+ bResult);
        System.out.println(); //newline
    }// end_main 

    public static BigInteger bigFunctionExample_2() {
        BigInteger bSum = BigInteger.ZERO;
        BigInteger bTmp;
        String sSum;
        // BigInteger bResult =0;
        for (int i=1; ; i++) {
            bTmp = BigInteger.valueOf(i);
            bTmp = bTmp.pow(i); // i^i
            bSum = bSum.add(bTmp); // sum = i^i+ (i-1)^(i-1)+ ....
            sSum = bSum.toString();
            if ( sSum.length() >21) {
                System.out.println("i="+i +" bSum ="+bSum);
                break;
            }//
        }//end_for
        return bSum; // result
    } // end_bigFunctionExample_2
}
4

2 に答える 2

0

コードを見ると、行がありますbTmp.pow(2)bTmpこれはシリーズの数字を 2 乗しますが、累乗する必要がありますbTmpBigIntegerJava は への引数としてa を取りたくないようですが、別のループpowに置き換えることができます。powfor

また、合計が 10 29sSum.length() >30以上の場合にのみ発生するようです。数値を 10 20と比較するのではなく、ループのたびに数値を文字列に変換する理由はありますか? おそらく、空白のままにして. 次に、新しいものを作成し、コードの開始時に 10 20に設定できます。bSum > bMaxforbreakBigInteger bMax

テストのために、bMax100 などの小さい値に設定して、プログラムが正しい結果を返すかどうかを確認できます。シリーズの最初の数ステップを手動で計算して、プログラムを確認できます。

于 2014-11-24T22:23:47.460 に答える