C语言,求完数,指正下面代码的错误

输出1~1000之间的所有完数,并输出每个完数的所有因子。所谓完数,就是指一个正整数,它的各因数之和等于其自身。例如,28=1+2+4+7+14,28是一个完数。
下面代码有错误,请指正。

img

代码如下, 如有帮助给个采纳谢谢

#include <iostream>
using namespace std;

// 计算一个数的所有因子的和
int sumOfFactors(int num) {
    int sum = 0;
    for (int i = 1; i <= num/2; i++) {
        if (num % i == 0) {
            sum += i;
        }
    }
    return sum;
}

int main() {
    cout << "1~1000之间的完数有:" << endl;

    for (int num = 1; num <= 1000; num++) {
        if (num == sumOfFactors(num)) {
            cout << num << "的因子为:1, ";
            for (int i = 2; i <= num/2; i++) {
                if (num % i == 0) {
                    cout << i << ", ";
                }
            }
            cout << "它们的和等于" << num << endl;
        }
    }

    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7790584
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:编写程序输人一个整数,计算并显示该整数的各位数字之和,例如,整型数1987的各位数字之和是1+9+8+7,等于25。
  • 除此之外, 这篇博客: 以下程序功能是实现求10000 以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如:6=1+2+3,28=1+2+4+7+14),并显示结果。中的 以下程序功能是实现求10000 以内的自然数中的完数及其个数(所谓完数,指它恰好等于除它本身之外的因子之和,如:6=1+2+3,28=1+2+4+7+14),并显示结果。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    Talk is cheap, show me the code.

    #include <stdio.h> 
    #define LEN 10000   
    
    int main(void) 
    { 
        int i, k, m, n, s, p=0;                         
        int a[100];                 //存放各个因子
        printf("Number as follows:");            
        for (i=2; i<= LEN; i++)           
        { 
            s = 0; 					//计算因子和
            m = 0; 
            k = 1; 
            while (k <= i/2)        //因为不算自身,所以剩余因子肯定<=i/2            
            { 
                if (i % k == 0) 	    //如果k是i的因子
                { 
                    s += k; 
                    a[m] = k; 
                    m ++; 
                } 
    			k ++;
            } 
            if (s == i)             //因子和 等于 数本身         
            { 
                p ++; 
                printf("\n%d\t= %d", s, a[0]); 
                n = 1; 
                while (n < m)         
                { 
                    printf(" + %d", a[n]);           
                    n ++; 
                } 
            } 
        } 
    
        printf("\nTotal Num: %d", p); 
    
        return 0; 
    }
    
  • 以下回答来自chatgpt:

    代码中存在一个错误,for循环的第二个参数应该为i而不是j,因为完数的定义是所有因数之和等于它本身,所以第二层循环应该从1开始到i,而不是从1开始到i-1。另外,为了更好的阅读体验,可以添加一定的注释来解释代码的逻辑。修改后的代码如下:

    #include <stdio.h>
    
    int main()
    {
        int i,j,sum;
        for(i=1;i<=1000;i++)
        {
            sum=0;
            for(j=1;j<=i;j++) // 修改了循环条件
            {
                if(i%j==0)
                    sum=sum+j;
            }
            if(sum==i)
            {
                printf("%d, its factors are:",i);
                for(j=1;j<i;j++)
                {
                    if(i%j==0)
                        printf("%d ",j);
                }
                printf("\n");
            }
        }
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^