c语言打印完数,我为什么错了?

#include<stdio.h>
int fun(int n)
{
int a,b=0;
for(a=2;a<n;a++){
if(n%a==0){
b=b+a;
}

}
if(b==n){
return b;
}
}
int main()
{
int a,b,c,i,n,m;
for(i=2;i<=1000;i++){
if(i==fun(i)){
printf("%d",i);
for(b=1;b<i;b++){
if(a%b==0){
printf("%d ",b);
}
}
printf("\n");
}
}
}

#include<stdio.h>

int fun(int n)

{ int a,b=0;

  for(a=1; a<n; a++) //有修改 

  { if(n%a==0)

    { b=b+a;

    }

  }

  return b; //有修改 

}

int main()

{ int a,b,c,i,n,m;

  for(i=2; i<=1000; i++)

  { if(i==fun(i))

    { printf("%d=1",i); //有修改 

      for(b=2; b<i; b++) //有修改 

      { if(i%b==0) //有修改 

        { printf("+%d",b); //有修改 

        }

      }

      printf("\n");

    }

  }

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-23
两个错误,
1、完数计算是从1开始,不是从2,所以for(a=2;a<n;a++)中的a=2需要改成1
2、在你的main中,你的for(b=1是计算i能否被b整除,所以if(a%b==0)需要改为if(i%b==0)
3、另外原来的数字与后面因子没空开,printf("%d",i);可以改为printf("%d=",i);本回答被提问者采纳
相似回答