项目Euler 20,有人可以告诉我为什么我的输出不正确吗?

时间:2017-05-24 23:19:45

标签: java math iteration calculation

public class ProjectEulerProblem20_Factorial_Digit_Sum {

public static void main(String[] args) {
    BigInteger oneHundredFactorial = BigInteger.ONE;
    for (int i = 100; i >= 1; i--) {
        oneHundredFactorial = oneHundredFactorial.multiply(BigInteger.valueOf(i));
    }       

    String k = oneHundredFactorial.toString();
    char x;
    int sum = 0;

    for (int i = 0; i < k.length(); i++) {
        x = k.charAt(i);
        sum = sum + x;
    }

    System.out.println(sum);
}

}

我不知道我在哪里错了。我的输出应该是100中所有数字的总和!但是,我不知道为什么我的sum值是8232,当正确的答案是648.代码对我来说似乎很基本,它似乎有意义。如果有人能帮我解决我似乎错过的东西,那将非常感激。谢谢!

编辑: 这就是问题所在:

N!表示n×(n-1)×...×3×2×1

例如,10! = 10×9×...×3×2×1 = 3628800, 和数字10中的数字之和!是3 + 6 + 2 + 8 + 8 + 0 + 0 = 27。

找到数字100中的数字之和!

2 个答案:

答案 0 :(得分:1)

如果要添加数字值,则添加ascii字符值。

memory.limit()

data<-read.table("volume.txt",sep="\t")[,c(ttl_units)]

require(data.table)
fread("shipped asin volume.txt",sep="\t", header= TRUE)-> pre

可以使用Character.digit(char, int)之类的

sum = sum + x;

sum = sum + Character.digit(x, 10);

sum += Character.digit(x, 10);

答案 1 :(得分:1)

您要添加字符代码而不是数字;您可以使用Character.getNumericValue来解决手头的问题。

将你的循环改为:

for (int i = 0; i < k.length(); i++) {
     sum = sum + Character.getNumericValue(k.charAt(i));
}