菜鸟一个,请各位看看这个算法为什么出错了
一个数如果恰好等于他的因子之和,就成这个数为“完数”;编程求出1000内的完数并输出他的因子
#include <stdio.h>
void main()
{
int num,s,i,j;
int a[20]={0};
for (num=1;num<1000;num++)
{
for(s=0,i=1,j=0;i<num;i++)
{
if(num%i==0)
{
s=s+i;
a[j]=i;
j++;
}
}
j=0;
if(s=num)
{
printf("%3d",num);
while(a[j]!=0)
{
printf("%3d",a[j]);
}
printf("\n");
}
for(j=0;j<20;j++)
a[j]=0;
}
}
运行后不断输出1,这是怎么了,求教
[解决办法]
- C/C++ code
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。___________________________________________________________________程序源代码:main(){static int k[10];int i,j,n,s;for(j=2;j<1000;j++){n=-1;s=j;for(i=1;i {if((j%i)==0){ n++;s=s-i;k[n]=i;}}if(s==0){printf(“%d is a wanshu”,j);for(i=0;i printf(“%d,”,k);printf(“%d\n”,k[n]);}}}
[解决办法]
有好几个问题,比如数组空间不足,s=num错误等等,参考以下代码:
- C/C++ code
#include <stdio.h>int main(int argc, char* argv[]){ int num, s, i, n; int a[36]; for(num = 1; num < 1000; num++) { for(s = 0, n = 0, i = 1; i < num; i++) { if((num % i) == 0) { s += i; a[n++] = i; } } if(s == num) { printf("%3d ", num); for(i = 0; i < n; i++) { printf("%3d ", a[i]); } printf("\n"); } } return 0;}
[解决办法]
while(a[j]!=0)
{
printf("%3d",a[j]);
}
你得加上
j++;
不然 一直接是 死循环