首页 > 解决方案 > 下降阶乘JAVA

问题描述

所以基本上我需要编写一个计算下降阶乘的方法。“下降功率 10 5 等于10 * 9 * 8 * 7 * 6 = 30240"

所以这是我的第一次尝试:

public static long fallingPower(int n, int k) {
    long holder = n;
    int counter;

    if (n > 0) {
        counter = 1;
        for (int i = k - 1; i > 0; i--) {
            holder = holder * (n - counter);
            counter++;
        }
    }

    if (n < 0) {
        counter = -1;
        for (int i = k - 1; i > 0; i--) {
            holder = holder * (n + counter);
            counter--;
            //System.out.println(holder);
        }
    }

    return holder;
}

它适用于问题上下文中给出的 (10, 5) (-4, 5) 和 (8, 3) 等测试,但它未能通过实际测试。

经过长时间的 wolfram alfa 读数和一些谷歌搜索,这通过了测试:

public static long fallingPower(int n, int k) {

    long count, holder;

    holder = 1;

    for (count = 0; count <= k - 1; count = count + 1) {
        holder = holder * (n - count);
    }

    return holder;
}

我的问题是,在第一种情况下我到底做错了什么导致正确的样本测试但在更大的输入下会导致不正确的输出。

非常感谢。

标签: javafactorial

解决方案


立即引起我注意的一件事是你的代码并没有真正处理n0 的情况。基本上你的两个if语句都被跳过了,所以你返回 0。但是这对我来说似乎是错误的,因为 0!= 1.注意你在网上找到的代码,这是占了。所以你的代码fallingFactorial(0, 1)是0,网上的代码fallingFactorial(0, 1)是1。


推荐阅读