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));
}
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));
}