You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:02:39