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)

各要素をループの 1 回の繰り返しと考えてください。

したがって、2 回目の反復では累積値に を乗算し(from + 1)、その後別の反復で(from + i)はを乗算する必要がありfrom < 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 でそれを行うと、オーバーフローが発生します。その場合は、int の代わりに BigInteger を使用する必要があります。

于 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 に答える