首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阶乘编程挑战混淆

阶乘编程挑战混淆
EN

Stack Overflow用户
提问于 2015-11-19 18:20:07
回答 1查看 106关注 0票数 2

我最近完成了一个编程挑战,要求我们获得2015年的阶乘。在计算阶乘之后,您将对整数中的所有数字进行求和(在本例中为BigInteger)。

完成后,我的成绩为: 23,517

然而,当我把它提交给教授时,他说正确的结果是: 26,532

我似乎根本找不到这个问题。我已经交叉检查了多个来源,到目前为止,一切似乎都表明我是对的。有人能找到我的密码哪里出错了吗?

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 18:34:33

答案是23517 是正确的。尽管如此,您仍然可以简化代码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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();
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33811495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档