2016-10-14 24 views
-3
int num; 
num = 0; 
for (int i = 1; i < 1000; i++) 
{ 
    for (int j = 1; j <= i/2; j++) 
    { 
     if (i % j == 0) 
      num = num + j; 
    } 

    if (num == i) 
     Console.WriteLine(num); 
} 

我試圖找到1到1000之間的完美數字,我寫了這段代碼,但沒有奏效!哪裏不對?我想找到0到1000之間的完美數字,而不是跑步

+0

*花括號*之間的完美的數字,你知道嗎? –

+3

'num'沒有被重置爲零 –

+0

@MatiasCicero他們在那裏,格式是可怕的。 – juharr

回答

3

正如其他人所說的舉動num = 0外環內。

int num; 
for (int i = 1; i < 1000; i++) 
{ 
    num = 0; 
    for (int j = 1; j <= i/2; j++) 
    { 
     if (i % j == 0) 
     { 
      num = num + j; 
     } 
    } 

    if (num == i) 
    { 
     Console.WriteLine(num); 
    } 
} 

這會給你的輸出 6 28 496這是0和1000個

+0

不,「j <= i/2」更有效,因爲沒有數字的合適除數大於該數字的一半。 – juharr

+0

糟糕,juharr是正確的。更新答案。 –

1

移動:

num = 0; 

以上的嵌套for循環。

像這樣:

 int num; 
     for (int i = 1; i < 1000; i++) 
     { 
      num = 0; 
      for (int j = 1; j <= i/2; j++) 
      { 
       if (i % j == 0) 
        num = num + j; 
      } 

      if (num == i) 
       Console.WriteLine(num); 
     }