1

我从模拟试卷中被困在这个问题上。我需要将“from”数字乘以“n”数字。换句话说:from*(from+1) (from+2) ...*n。

我需要通过使用while循环来解决这个问题。到目前为止我已经这样做了,不知道该怎么做。

class Fact {

    private int factPartND(final int from, final int n) {

        int c = 1;
        int z = from;
        int y = n;
        int num = 0;

        while (y >= z) {

            num += from * (from + c);// need to stop multiplying from for each
                                     // iteration?
            c++;
            y--;
        }

        return num;
    }

    public static void main(String[] args) {
        Fact f = new Fact();
        int test = f.factPartND(5, 11);
        System.out.println(test);
    }

}
4

4 回答 4

4

while您的循环条件有问题。

while(y>=z)
{
    ....
}

将执行您的代码 n+1 次。即如果你想从 5 到 11 执行,这个条件将允许执行到 12。

while(y>z)在 while 循环中更好地使用条件。

于 2012-08-14T08:27:04.597 回答
3

你的计算是:

from * (from + 1) * (from + 2) * ... * (from + n)

将每个因素视为循环的一次迭代。

因此,您的第二次迭代应该将累积值乘以(from + 1),然后再进行一次迭代乘以(from + i)、 wherefrom < i < n等等,直到您将累积值乘以(from + n)

您的代码非常接近 - 您(from + c)在每次迭代中都有,但您的算术是错误的。

正如已经提到的,使用c y跟踪你的循环有点令人困惑,当它足以测试时c

于 2012-08-12T18:14:32.463 回答
-2
public class Fact {

    private int factPartND(final int from, final int n) {
        int m = 1;
        int result = from;

        while (m <= n) {
            result *= (from + m++);
        }

        return result;
    }

    public static void main(String[] args) {
        Fact f = new Fact();
        int test = f.factPartND(5, 8);
        System.out.println(test);
    }
}

如果你用 5, 11 来做,你就会溢出。那么你应该使用 BigInteger 而不是 int。

于 2012-08-12T18:22:21.303 回答
-3

也许是这样的:

package homework;
public class Homework {

    public static int fact(int from, int to){
    int result = 1;
    while(to>0){
        result*=from+to;
        to--;
    }
    return result*from;
    }
    public static void main(String[] args) {
    System.out.println(fact(2,4));
    }
}
于 2012-08-12T18:24:37.240 回答