0

私は Project Euler の問題をいくつかやっていますが、問題に遭遇しました。このアルゴリズムが 2^1000 で機能しない理由がわかりません。10^1 と 10^8 の範囲の数値 (これらは私がテストしたものです) で機能しますが、考えられるすべての範囲で機能するはずです。

ちなみに、2^1000 は 1.07*10^301 です。double の上限は多かれ少なかれ 10^308 にあるため、数値はまだ範囲内にあります。

import java.lang.Math;

public class Euler15 {
    public static void main(String[] args) {


        int count = 0;
        double res = Math.pow(2,1000);

        for(int i = 301; i >= 0; i--){
            if (res == 0){
                break;
            }
            while (res >= Math.pow(10, i)){
                res-= Math.pow(10, i);
                System.out.println(res);
                count++;
            }
        }

    System.out.println(count);
}
}
4

1 に答える 1

2

2^1000 は、通常のデータ型では大きすぎます。BigInteger または文字列を使用します。

import java.math.BigInteger;

入力を BigInteger として受け取ります。

BigInteger n = BigInteger.valueOf(2);

次に、1000 までパワーアップします。

n = n.pow(1000);

次に、を使用して文字列に変換し、toString()各文字を結果に追加して、int. それでいいはずです。

于 2013-11-23T21:51:43.493 に答える