Project Euler 20,有人能告诉我为什么我的输出不正确吗?

Project Euler 20, Can someone tell me why my output is not correct?

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 中各位数字的和!

当你想添加数字值时,你正在添加ascii字符值。

sum = sum + x;

可以使用Character.digit(char, int)喜欢

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

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

sum += x - '0';

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

将循环更改为:

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