请帮小弟我看看,这个程序在vs2008中编译的结果,什么地方出了有关问题

请各位高手帮我看看,这个程序在vs2008中编译的结果,什么地方出了问题?
# include <stdio.h>
int main ()
{
int n,i,s;
for (n=2;n<=1000;n++)
{
s=0;
for (i=1;i<n;i++)
{
if (n%i==0)
s=s+i;
     if (s==n)
   {
printf ("%d是完全数。它的因子是:",n);
for (i=1;i<n;i++)
      {
if (n%i==0)
printf ("%d  ",i);
       }
printf ("\n");
    }
}
}
return 0;
}
请帮小弟我看看,这个程序在vs2008中编译的结果,什么地方出了有关问题
------解决思路----------------------
修改如下:

int main()
{
int n, i, s;
for (n = 2; n <= 1000; n++)
{
s = 0;
for (i = 1; i < n; i++)
{
if (n % i == 0)
s = s + i;
}
if (s == n)
{
printf("%d是完全数。它的因子是:", n);
for (i = 1; i < n; i++)
{
if (n % i == 0)
printf("%d  ", i);
}
printf("\n");
}
}
return 0;
}

------解决思路----------------------
一个高效点的版本:

int factors[100];  //存放因子
int main()
{
int n, i, j, s;
for (n = 2; n <= 1000; n++)
{
s = 0;
j = 0;
for (i = 1; i <= n/2; i++)
{
if (n % i == 0)
{
s = s + i;
factors[j++] = i;  //记录n的因子
}
}
if (s == n)
{
printf("%d是完全数。它的因子是:", n);
for (i = 0; i < j; i++) printf("%d ", factors[i]);
printf("\n");
}
}
return 0;
}
//6是完全数。它的因子是:1 2 3
//28是完全数。它的因子是:1 2 4 7 14
//496是完全数。它的因子是:1 2 4 8 16 31 62 124 248

------解决思路----------------------
第二个for循环应该只包含紧跟它的if语句,你的目的是对穷举找出n的每个因子并求和。在你的源代码里,把第二个if也包含在内,就会在求n因子的过程中(还没有完全求完,只是部分因子)得到的和与n相同,然后就会输出全部。