C++求1-1000完全数程序无输出问题排查求助
问题分析与修正
核心错误点
- 变量
k的初始化位置错误:你把int k = 0;放在了内层i的循环里,导致每次i自增时,k都会被重置为0。比如判断z=6时,i=1时k累加为1,i=2时k又被设为0再累加2,直到i=5时k始终无法累加到6,最终判断条件永远不成立,自然没有输出。 - 判断时机不合理:你在每次
i循环时都做判断,但此时因子还没累加完全,应该等所有因子遍历结束后再验证是否为完全数。
修正后的代码
#include<iostream> using namespace std; int main() { for (int z = 1; z <= 1000; z++) { int k = 0; // 移到外层循环内,每个z对应一个初始为0的累加器 for (int i = 1; i < z; i++) { if (z % i == 0) { k += i; // 累加所有真因子 } } // 所有因子遍历完成后再判断是否为完全数 if (k == z) { cout << z << " "; // 输出完全数,加空格分隔更清晰 } } return 0; }
可选优化建议
遍历因子时不需要到z-1,只需到z/2即可——因为大于z/2的真因子不存在(除了z本身,而我们不统计自身),这样能减少循环次数,提升运行效率。修改内层循环条件为:
for (int i = 1; i <= z/2; i++)
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

