2017-04-09 5 views
1

私はかなり新しくコーディングしています。私はCを勉強しています。私のクラスインストラクターは、どの整数が「完全な数字」であるかを教えるプログラムを書く仕事をしました例えば、6 = 1 + 2 + 3のように、6は完璧な数字です。)私は書いたコードにいくつかの問題に直面しており、助言を得ることを望んでいました。Cプログラムで完璧な数字を見つける

#include <stdio.h> 

int main(void) { 
    int number, counter, sum; 

    sum = 0; 

    printf("For the integers from 1 to 1000:\n"); 

    for (number = 1; number <= 1000; number++) { 
     counter = 1; 
     while (counter <= number - 1) { 
      if ((number - 1) % counter == 0) { 
       sum += counter; 
      } 
     } 
     if (sum == number) { 
      printf("%d is a perfect number.\n", number); 
     } 
    } 

    return 0; 
} 

これは私が書いたコードです。私が直面している問題は、プログラムを実行すると、「1から1000までの整数のためだけに」印刷され、それが停止するということです。プログラムは終了することさえありません。

私が言及した問題以外にも、アドバイスや提案は大変ありがたいです。

ありがとうございました!

+2

あなたの 'while'ループは無限大です。 –

+1

'if((number - 1)%counter == 0){'これは 'number-1'に最適な数を与えます。それを 'if((number)%counter == 0){'と置き換えてください。 – AntonH

+0

while-conditionの唯一の2つの変種である 'number'と' counter'のどちらもwhileループ内で変更されていません。一度あなたが入っていると、あなたは永久にあなたにいます。 *何かを変えなければなりません。 – WhozCraig

答えて

3

プログラムが終了しない理由は、whileループが無限にあるためです。 counterは常にループ内で変更されないので、number - 1より小さくなります。いくつかのIDEでは、構文のハイライトスタイルの警告が表示されます。この問題を解決するには、あなたのカウンタの増分を追加します。

while (counter <= number - 1) { 
    if ((number - 1) % counter == 0) { 
     sum += counter; 
    }   
    counter++; 
} 

を通りさておき、あなたはまた、if ((number - 1) % counter == 0)中(無限whileループとは何の関係も)論理エラーを持っていません。これは、入力された数字の減少が完全かどうかをチェックします。 if (number % counter == 0)

+0

ああ、ありがとうございます。アドバイス次回より注意してください – Sean

+0

@ABusyProgrammer https:// metaではなく、[誰かが私の質問に答えるとどうすればいいですか?](http://stackoverflow.com/help/someone-answers)を提案することを検討してください。 。Stackbackflow.com/q/287723/2410359 – chux

+0

@Sean StackOverflowのガイドラインとchuxの推薦に従って、[誰かが私の質問に答えたらどうすればいいですか?](http://stackoverflow.com/help/someone-answers) upvotingか、それがあなたのために働く場合はそれを受け入れることによって、良い答えを感謝します。 –

関連する問題