2017-01-14 10 views
-1

整数の範囲で完璧な数字を見つける。完璧な数字を見つける

は、まず私はこのコードを書いた:

#include <stdio.h> 

int main() { 
    int ara[5] = { 6, 28, 496, 2128, 33550336 }; 
    int num, i, l, j, kase; 

    scanf("%d", &kase); 
    for (l = 0; l < kase; l++) { 
     scanf("%d", &num); 
     j = 1; 
     for (i = 0; ara[i] <= num; i++) { 
      printf("%d\n", ara[i]); 
     } 
    } 
    return 0; 
} 

私のような多数の入力:

2//kase 
40000000//input_1 

出力:

6 
28 
496 
2128 
33550336 
1 
0 
7 

76596795(INPUT_2)出力:

6 
28 
496 
2128 
33550336 
1 
1 
7 

ループ内の条件を使うと完全にうまく動作します。など

​​

1 //加瀬40000000 //入力出力は:誰もが私にこのことについていくつかの詳細を伝える場合6, 28, 8128, 33550336.

それは私にとって大きな喜びになるでしょう。

+3

'c'と' C++'タグの両方に理由はありますか? – Carcigenicate

答えて

1

これは、最初のケースでは、iの値が5に達しても、コントロールがループ内にとどまるためです。

for(i = 0; ara[i] <= num; i++) 
    { 
     printf("%d\n", ara[i]); 

    } 

40000000と入力します。次に、配列内のすべての要素が条件ara[i] <= numを満たします。しかし、これはループを終了するための唯一の条件です。そのため、ループi=5,6,7...などに留まります。残りの出力値はガベージ値です。

i<5の2番目のケースでは、問題が解決されていることを確認しています。あなたはこれを行うことができます

for(i = 0; i < 5 && ara[i] <= num; i++) 
    { 
     printf("%d\n", ara[i]); 

    } 
関連する問題