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

完美数算法无法输出正确结果求助:输入28也无法判定为完美数

完美数算法问题修复

你的代码核心问题是sum变量未初始化,C语言中局部变量若不手动初始化,会被分配随机垃圾值,导致累加后的结果完全错误,哪怕输入28也无法得到正确判断。

修复后的代码

#include <stdio.h>

int main() {
    int x = 0;
    int sum = 0; // 关键:初始化sum为0
    printf("enter a number: ");
    scanf("%d", &x);
    for(int i = 1; i < x; i++) {
        if(x % i == 0) {
            printf("%d ", i);
            sum = sum + i;
        }
    }
    printf("\n");
    if(sum == x) {
        printf("it's a perfect number");
    } else {
        printf("it's not a perfect number");
    }
    return 0; // 补充main函数返回值,符合C标准规范
}

额外优化建议

循环可以只执行到i <= x/2,因为大于x/2的数不可能是x的真因数(除了x本身),能减少一半循环次数,提升效率:

for(int i = 1; i <= x/2; i++) {

内容的提问来源于stack exchange,提问作者Jack Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:24:54