int i, n, s ;
s = 0; //在这里不出结果
for (n = 2; n < 1000; n++) {
//如果加在这里就可以得出结果
for (i = 1; i < n; i++) {
if ((n % i ) == 0) {
s = s + i;
}
}
if (n == s)
printf("%d\n", n);
}
}
因为每次测试一个数之前s都要重置为0
s是统计单独一个数的因子之和
赋值在for外就不能每次测试一个数之前s重置为0
所有数的因子之和都会累加在一起,结果自然不对了
s=0的初始化必须放在第4行才符合条件,如果放在外面就变成统计所有的和了。
对于外层循环的每个值,都要重新计算sum值的。在第4或13行加上sum=0;即可
主要是理解代码的执行过程,变量放外面只执行一次,放for里面每次循环都执行,都重新赋值,所以导致结果是不一样的,希望帮助到你,我是csdn张老师,望题主采纳