完美数算法无法输出正确结果求助:输入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
相关产品推荐
相关产品推荐

