首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-24 
C语言编程完全数要求输出0到32000之间的所有完全数以及其因子之和的式子...一下是我的编程 求高手帮忙解决

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

热点排行