0

次のように値の総数を合計するプログラム「longintsum(intn)」を作成する必要があります。

1! − 2! + 3! − ... ± n!

私は次の合計を書くことに成功しました:

1-3 + 5 - ... ± (2n + 1)

float sum (int n) {
int max = 2*n +1, i = 1, sum = 0, ch = 2;

for (i = 1; i <= max; i+2; ){
    if ((ch%2) == 0){
        sum += i;
    }
    else{
        sum = sum - i;
    }
    ch++;
    return sum;
}

しかし、階乗の合計を計算する方法がわかりません。

4

2 に答える 2

1

階乗を実行する別の関数と交項級数の合計を実行する関数を作成すると便利です。。。

    int factorial(int n)
    {
        int sum = 1;
        if (n > 0)
            for (int i = n; i > 1; --i)
                sum *= i;
        else if (n <= 0)
            return 0;

        return sum;
    }

    int alernatingSeriesSum(int nStart)
    {
        if(nStart < 1) return 0;
        int sum = 0;
        for(int i=1; i<nStart; ++i)
            sum += (factorial(i) * ((i%2)==0 ? -1 : 1));  //multiply -1 if its an even #s
        return sum;
    }

階乗は非常に単純で、値を掛け、1ずつ減らし、1に達するまで繰り返します。

交代級数の合計は類似しており、到達反復の階乗を呼び出し(今回はインデックスが増加する場合を除く)、インデックスが偶数になるたびに-1を乗算することで交代符号を作成します。これが私たちが1を生み出す方法です!--2!+ 3!-4!+。。。+(n + 1)!-(n + 2)!

私はそれが役立つことを願っています。。。

関数に分割できない場合は、これをすべて1つのメイン関数に記述してみてください。。。私はこのコードをCでテストしましたが、動作します。気軽にコードを試して、各行の機能を読んでみてください。幸運を。

于 2012-12-16T23:40:40.587 に答える
1

それを2つの機能に分割します。それ以外の

sum += i;

sum = sum - i;

試す:

sum += factorial(i);

sum = sum - factorial(i)

ここで、階乗は階乗を計算するメソッドです。

long int factorial(int n) {
    long int fact = n;
    while ( n > 1) {
        n--;
        fact *= n;
    }

    return fact;
}
于 2012-12-16T23:36:04.997 に答える