输出X以内所有的完数,并输出其所有的因子。所谓完数,是指小于自身的所有因子之和恰好等于其本身。例如,6是一个完数,因为1+2+3=6。 从键盘输入X,输出完数及其所有因子,输出的每个数字占5位

img


我想问一下我的代码哪里有问题,结果是什么都不输出,我感觉我的逻辑没问题

这里可定不能用相等判断啊

img

#include<stdio.h>
int main()
{int a,b;
for(a=1;a<=1000;a++)
{    
    int x=0;
    for(b=1;b<a;b++)
    {if(a%b==0)
    x=x+b;}
    if(a==x){
    printf("%d\n",a);
    for(b=1;b<a;b++)
    {if(a%b==0)
    printf("%d\t",b);}
    printf("\n");
    }
}
 
return 0;
}
 

//我们可以创建一个变量存放要找数字的因子之和,如果这个数恰好等于它的因子之和,那么进行对他所有的因子打印输出。
#include<stdio.h>

void main()
{
int n,i,sum,x;
scanf("%d",&x);
for(n = 2;n <= x;++n){
sum = 0;//存放因子之和
for(i = 1;i < n;++i){
if(n % i == 0){
sum += i;
}
}
if(sum == n){//如果因子和与输入的数字相同,说明 n 是完数
printf("\n%d\n",sum);
for(i = 1;i < n;++i){
if(n % i == 0){
printf("%5d",i);//打印 n 的因子
}
}
}
}
}

img