我正在尝试解决 Project Euler 问题 #16,我需要对 2^1000 的所有数字求和。我已经被困在处理这么大的数字了。我的程序适用于 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));
}
}