答案中的未知因素

时间:2012-12-22 09:55:20

标签: java sum-of-digits

我无法用我写的内容找到问题。我正在尝试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));

}

}

3 个答案:

答案 0 :(得分:5)

双精度约为16位十进制数。由于2 power 1000有更多的数字(大约300),你根本无法使用double。

看一下BigInteger类。

答案 1 :(得分:1)

您不能在此处使用double:它们仅具有有限的精度。 (见Java primitive datatypes

所以Math.pow(2,1000)只计算一些(第一)数字和指数。

你必须使用一些处理任意长整数的库。 (例如biginteger

答案 2 :(得分:0)

我现在明白了。我用这个代表十进制数的BigDecimal对象替换了所有双打,以便小数精度&&达到#的大小。谢谢大家。