一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:

问题遇到的现象和发生背景

一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1 2 3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子:“

问题 无输出

问题相关代码,请勿粘贴截图
#include<iostream>
using namespace std;
int main()
{
    int N;
    int sum=0;
    cin>>N;
for(int a=1;a<=N;a++) 
{
    for(int b=1;b<=a/2;b++)
    {
        if(a%b==0)
        sum+=b;
        if(sum==a)
        {
            cout<<a<<" its factors are ";
         for(b=1;b<=a/2;b++)
           {
               if(a%b==0)
               cout<<b<<" ";
           }
           cout<<endl;
        }   
    }
}
return 0;
}


###### 运行结果及报错内容
无输出

#include<stdio.h>
int main(){
    int n,i,fator,sum;//n表示题目中N以内的数,判断i是不是完数,fator是因子,sum是因子fator的和
    scanf("%d",&n);//输入N,查找N以内的所有完数
    for(i=2;i<=n;i++){
        sum=1;//1是所有数的因子,所以sum初始值为1
        for(fator=2;fator<=i/2;fator++){//找到数i的所有因子fator并求和得到sum
            if(i%fator == 0) 
                sum+=fator; 
        }
        if(sum == i){//如果sum和i相等,说明i是完数
        printf("%d its fastors are 1",i );
        for(fator=2;fator<=i/2;fator++){//循环输出所有因子
            if(i%fator == 0)
                printf(" %d",fator);//满足题目中【最后一个数字后面没有多余的空格】
        }
        printf("\n");
    }    
    }
    return 0;
}

每执行一次外循环,sum需要重置为0


#include<iostream>
using namespace std;
int main()
{
    int N;
    int sum=0;
    cin>>N;
for(int a=1;a<=N;a++) 
{
    sum=0;//重置为0
    for(int b=1;b<=a/2;b++)
    {
        if(a%b==0)
        sum+=b;
        if(sum==a)
        {
            cout<<a<<" its factors are ";
         for(b=1;b<=a/2;b++)
           {
               if(a%b==0)
               cout<<b<<" ";
           }
           cout<<endl;
        }   
    }
}
return 0;
}