读书人

C语言编程完全数解决思路

发布时间: 2012-03-24 14:00:46 作者: rapoo

C语言编程完全数
要求输出0到32000之间的所有完全数以及其因子之和的式子...
一下是我的编程 求高手帮忙解决迓 感激不尽迓~!!!!
#include<stdio.h>
void main()
{ int a[50],i,j,m,n,k,s; clrscr();
do
{ printf("\n\tplease input m (0<m<n<=32000) :");
scanf("%d",&m);
}while((m<0)||(m>32000));
printf("\n");
do
{ printf("\n\tplease input n (0<m<n<=32000) ;");
scanf("%d",&n);
}while((n<0)||(n>32000)||(n<m));

for(j=m;j<n;j++)
{ k=0; s=1;
for(i=2;i<=j/2;i++)
{ if(j/2==0)
{ s=s+i;
a[k]=i;
k=k+1;
}
}
if(s==j)
{ printf("%d=1",j);
for(i=0;i<k;i++)
printf("\n\t+%d",a[i]);
}
} getch();
}

[解决办法]

C/C++ code
//完整代码int main(){   int a[50],i,j,m,n,k,s;   do  {       printf("\nplease input m (0<m<n<=32000) :");      scanf("%d",&m);  }while((m<0)||(m>32000));    printf("\n");    do  {     printf("\nplease input n (0<m<n<=32000) :");    scanf("%d",&n);  }while((n<0)||(n>32000)||(n<m));  for(j=m;j<n;j++)  {      k=0; s=1;     for(i=2;i<=j/2;i++)     {          if(j%i==0) //求j的因子是用求余运算      { s=s+i;       a[k]=i;       k=k+1;     }  }    if(s==j)  {     printf("%d=1",j);    for(i=0;i<k;i++)      printf("+%d",a[i]);    putchar('\n');  }    }   getch();  return 0;}
[解决办法]
其实,根据完全数的性质。你可以优化你的程序。比如,完全数都是以6或8结尾的数,那么先判断它是不是以这两个数结尾的,然后再从定义上判断。也可以先从结尾是不是6或8,然后看:各位数字相加直到变成个位数则一定是1(除6以外的完全数,把它的各位数字相加,直到变成个位数,那么这个个位数一定是1。(亦即:除6以外的完全数,被9除都余1))。比如,496:4+9+6=19,1+9=10,1+0=1

读书人网 >C语言

热点推荐