我最近完成了一个编程挑战,要求我们获得2015年的阶乘。在计算阶乘之后,您将对整数中的所有数字进行求和(在本例中为BigInteger)。
完成后,我的成绩为: 23,517
然而,当我把它提交给教授时,他说正确的结果是: 26,532
我似乎根本找不到这个问题。我已经交叉检查了多个来源,到目前为止,一切似乎都表明我是对的。有人能找到我的密码哪里出错了吗?
import java.math.BigInteger;
class toymeister {
public static void main(String[] args){
System.out.println("The sum is: " + SumOf(FactorialOf(2015)));
}
public static BigInteger FactorialOf(int x){
BigInteger Answer, intConvert;
intConvert = new BigInteger("0");
Answer = new BigInteger("1");
for(int i=1; i<=x;i++){
intConvert = intConvert.valueOf(i);
Answer = Answer.multiply(intConvert);
}
System.out.println("The Factorial Of " + x + " is: " + Answer);
return Answer;
}
public static BigInteger SumOf(BigInteger y){
BigInteger Sum = new BigInteger("0");
while(y.compareTo(BigInteger.ZERO) > 0) {
Sum = Sum.add(y.mod(BigInteger.TEN));
y = y.divide(BigInteger.TEN);
}
return Sum;
}
}发布于 2015-11-19 18:34:33
答案是23517 是正确的。尽管如此,您仍然可以简化代码:
public static BigInteger factorialOf(int x) {
BigInteger answer = BigInteger.ONE;
for(int i = 1; i <= x; i++) {
answer = answer.multiply(BigInteger.valueOf(i));
}
System.out.println("The Factorial Of " + x + " is: " + answer);
return answer;
}
public static int sumOf(BigInteger y) {
String digits = y.toString();
int sum = 0;
for(int i = 0, n = digits.length(); i<n; i++) sum += digits.charAt(i)-'0';
return sum;
}或者,使用Java 8:
public static BigInteger factorialOf(int x) {
return IntStream.rangeClosed(1, x).mapToObj(BigInteger::valueOf)
.reduce(BigInteger::multiply).orElse(BigInteger.ONE);
}
public static int sumOf(BigInteger y) {
return y.toString().chars().map(i -> i-'0').sum();
}https://stackoverflow.com/questions/33811495
复制相似问题