0

私はこれのために小さなループを書こうとしています

ここに画像の説明を入力

ここで、Pi は (ご存じない場合は、徹底して) k の範囲での引数の積です。和の記号のようなものです。とにかく、これを書く方法に頭を悩ませているようには見えません。私はこの小さな関数を書きましたが、それは私が望むものではありません。指定した範囲で (7i - 2) の結果を出力しているだけです。それらをすべて掛け合わせているわけではありません。私はそれをするように頼む方法さえわかりません。ヒントを探していますが、必ずしも答えではありません (ただし、それもいいでしょう)。

私がこれまでに行ったこと:

void prod(long int& num)
{
    for ( int i = 1; i <= 25; ++i)
    {
        num =(-1.0)*((7.0*i - 2));

        std::cout << num << std::endl;

    }
}
4

4 に答える 4

2
num = 1;    
for (int i=1; i <= 25; ++i)
{
    num *= ((7.0*i - 2));
    std::cout << -num << std::endl;
}
num *= -1;
std::cout << num << std::endl;

微妙な違い。

*=オペレーターはこんな感じで…… 。

A *= B;

これを書いているのとまったく同じです...

A = A * B;

左の値を右の値で乗算し、左の値に代入します。

+=-=*=/=、およびのすべての数学演算子で同じことができます%=


bruce3141編集:メモとして、およびの回答で適切に指摘されているように、intlong longデータ型の両方が に到達する前にオーバーフローを引き起こすため、現状k = 25では、このアルゴリズムは正しいですが、正しい結果は得られませんオーバーフローによるコンピュータ。などの浮動小数点データ型を使用することdoubleは、実際には受け入れられるソリューションではありません。long long格納されるものよりも大きな整数を処理できるクラスを調べる必要があります。何があるかわかりませんが、のクラスC++に相当するものを探しています。JavaBigInteger

于 2013-11-05T03:47:05.190 に答える
1

1 に初期化numしてから、これをwhile:

num = num*((7.0*i - 2));

最後に掛け-1ます。

于 2013-11-05T03:47:11.367 に答える
-1
double prod(unsigned int k)
{
    double result = 1;
    for(int i = 1; i <= k; i ++)
    {
        result * = 7*i - 2;
    }
    return -result;
}

次のように使用できます。

std::cout<<prod(25);

使い方:

for(int i = 1; i <= k; i ++)
    {
        result * = 7*i - 2;
    }

式の pi 部分を計算します -1 は pi 式の外にあるため、結果に -1 を 1 回だけ掛けてから、return ステートメントで返します。

return -result;

編集:

すべての数式 (未知数がない場合) は、常に単一の値に等しくなります。したがって、関数が式の値を返すようにすることで、その式を表す方が適切です。値を返すと、値をコンソールに出力するだけでなく、関数の再利用が容易になります。
たとえば。私は次のようなことができます double x = prod(3) + prod(4);

不明な値 (上限 k) が 1 つあるため、それを関数のパラメーターとして使用し、k のさまざまな上限値でコードを使用できるようにします。

後でコードをリファクタリングして時間を無駄にしないように、優れた設計パターンに従うことは常に良いことです。

于 2013-11-05T03:49:52.610 に答える