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

初学者一个,请各位看看这个算法为什么出错了

2012-10-25 
菜鸟一个,请各位看看这个算法为什么出错了一个数如果恰好等于他的因子之和,就成这个数为“完数”;编程求出10

菜鸟一个,请各位看看这个算法为什么出错了
一个数如果恰好等于他的因子之和,就成这个数为“完数”;编程求出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++;

不然 一直接是 死循环

热点排行