我无法用我写的内容找到问题。我正在尝试Project Euler#16,我需要将所有数字加起来为2 ^ 1000。我的程序使用较小的数字,但随着数字大约18位左右,它会中断。有什么帮助吗?
public static double digit(double n){
return n % 10;
}
public static double sumofDigits(double n){
double sum = 0;
while(n > 1){
sum += digit(n);
n = Math.floor(n/10);
}
return sum;
}
public static void main(String[] args) {
double x = Math.pow(2,1000);
double y = 22222222222222222222d;
System.out.println(sumofDigits(x));
System.out.println(sumofDigits(y));
}
}
答案 0 :(得分:5)
双精度约为16位十进制数。由于2 power 1000有更多的数字(大约300),你根本无法使用double。
看一下BigInteger类。
答案 1 :(得分:1)
您不能在此处使用double
:它们仅具有有限的精度。 (见Java primitive datatypes)
所以Math.pow(2,1000)
只计算一些(第一)数字和指数。
你必须使用一些处理任意长整数的库。 (例如biginteger)
答案 2 :(得分:0)
我现在明白了。我用这个代表十进制数的BigDecimal对象替换了所有双打,以便小数精度&&达到#的大小。谢谢大家。