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();
}
[解决办法]
//完整代码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