私は 2^1000 のすべての数字を合計する必要があるプロジェクト オイラーの問題 #16 を解決しようとしています。こんなに大きな数を扱うのに行き詰まりました。私のプログラムは 10^16 未満の任意の数値に対して機能しましたが、その後失敗しました。これは、私の論理が正しいことを教えてくれました。すべての変数とメソッドを BigDecimal に変換しましたが、プログラムが正しく実行されません。そのままコンパイルされ、エラーはありません。終了しないだけです。ここで私がどこで間違ったのか、誰かが考えを持っていますか?
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Powerdigitsum {
private static final BigDecimal one = new BigDecimal("1");
private static final BigDecimal ten = new BigDecimal("10");
private static BigDecimal sumofDigits(BigDecimal n){
BigDecimal sum = new BigDecimal("0");
while(n.compareTo(one) == 1 || n.compareTo(one) == 0){
sum.add(n.remainder(ten));
n.divide(ten);
n = n.setScale(0, RoundingMode.FLOOR);
}
return sum;
}
public static void main(String[] args) {
final double the_number = Math.pow(2,1000);
final double test = 15;
final BigDecimal two_to_the_thousandth_power = new BigDecimal(test);
System.out.println(sumofDigits(two_to_the_thousandth_power));
}
}