2017-03-29 20 views
-5

を動作しません:(!1/2)私は私にこの表示するには、このコード化され、私は私のコードがすべて正しいだと思うが、それは

1 +を+(1/3!)+ ... +(1/!N)
このコードは、これを示さなければならない(nは< 10)

#include <iostream> 
using namespace std; 
int main() { 
int n; 
float factn=1,m,sum; 
cout<<"enter n\n"; 
cin>>n; 
if(n<10&&n>=0){ 
do{ 
     factn=factn*n; 
     m=1/factn; 
     sum=sum+m; 
     n--; 
    }while(n>=1); 
     cout<<sum; 
} 
else{ 
    cout<<"error!\n"; 
} 
return 0; 

} 

場合:

(nは< 10)1 +(1/2!)+(1/3!)+ ... +(1/N!)

問題は何ですか?
それは、あなたが最初に合計= 0に初期化されていない。変数sumを

+6

でループを簡単に使用することができ、通常は不正なコードのサインです。 –

+0

あなたの最初の合計値についてのコメントに加えて、階乗計算が間違っている、たとえばnが5であるとすると(開始時の合計値)+ 1/5 + 1/20 + 1/60 + 1/120 + 1/120。ループの繰り返しごとにnの階乗を計算する必要があります。結果は(0 + 1 + 1/2 + 1/6 + 1/24 + 1/120) – Tuffwer

答えて

0

:(間違った値を返すランダムな値を持つ合計はあるべき場所、それがメモリにその場所にRAMに格納される。

+1

なぜ 'sum'の値は' m'と同じ場所に保存されますか?そうではありません。それらは異なる変数です。 – Rakete1111

+0

@ Rakete1111何ですか?いいえそれはない – Swift

+0

@スウィフト私は知っている、それは私が求めている理由です。私は自分の質問をよりよく表現しておかなければなりません:) – Rakete1111

2

コードには2つの問題があります:最初にsumは初期化されていませんので、結果が出ても何の意味もありません2番目のループは間違った方向に進みます。 2、次に3など;このループはnで開始し、次にn-1に移動し、次にn-2などに移動します。do... whileループを次のように変更します。

for (int i = 0; i < n; ++i) { 
    // do the calculation for i 
} 
0

フォーマットを修正する時間がかかります。コードを見やすく読みやすくすることを除けば、プログラムの構造とロジックについてのあなたの考えに焦点を当てていることがよくあります。おそらく、その場合に問題が数式の実装で見つかる可能性があります。

入力した値が正しい場合、cinはステータスを表示できます。繰り返し入力が必要な場合は、ステータスがクリアされる必要があります。 ローカル変数を使用してfor()ループで式を実装できます。それは、あなたが直接宣言を使用し、必要に応じながら使用することができ、使用するループのタイプ、本当に問題ではないだけで()のために、いくつかの宣言と文はその「ヘッダ」に含まれることができます:

実際
#include <iostream> 
using std::cin; 
using std::cout; 
int main() 
{ 
    int n; 

    cout << "enter n\n"; 
    bool res = cin >> n; // false if input was incorrectly parsed 
    if (res) 
     res = (n<10) && (n>=0); 

    if(res) 
    { 
     float sum = 1; // starting value for sum 
     for(int k = 1, j = 1; k < n; k++) 
     { 
      j = j * (j + 1); // j accumulates factorial 
      sum = sum + 1.f/j; 
     } 
     cout<< sum << "\n"; 
    } 
    else 
    { 
     cout<<"error!\n"; 
    } 
    return 0; 
} 

指数関数を使うことで、サイクルなしで階乗を計算する方法があります。

0

あなたは、「私は私のコードがすべて正しいだと思う」

for (int i = 0; i < n; i++)

+0

コメントはコメントです。答えは完全な答えです。 – MotKohn

関連する問題