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

初学者有关问题:出现死循环!

2012-03-28 
菜鸟问题:出现死循环!??我用一个for循环求1000以内的完数for(inta6a1000a++){intsaintk[16]{0}in

菜鸟问题:出现死循环!??
我用一个for循环求1000以内的完数
for   (int   a   =   6;   a   <=   1000;   a++)
{
int   s   =   a;
int   k[16]   =   {0};
int   n(0);
for   (int   i   =   1;   i   <   a;   i++)
{
if   (a%i   ==   0)
{
s   -=   i;
k[n]   =   i;
n++;
}
}

if   (s   ==   0)
{
cout   < <   a   < <   "是完数,它的因子有:   ";
for   (int   j   =   0;   j   <   n;   j++)
{
cout   < <   k[j]   < <   "   ";
}
cout   < <   endl;
}


}

答案应该是6,28,496,可是我一运行,结果只有6,28,然后CPU使用率就一直高居100%不下,想问一下各位大虾这是怎么一回事啊??



[解决办法]
for (int a = 6; a <= 1000; a++)
{
int s = a;
int k[16] = {0}; //1000以内的完数只有3个,可是你这个数组不是存放完数的.
int n(0);
for (int i = 1; i < a; i++)
{
if (a%i == 0)
{
s -= i;
k[n] = i; //只要1000以内的数有公约数,你这个数组就开始存放了,远大于16个数.你没
//有及时地清空这个数组.导致数组越界.
n++;
}
}

另外,楼主还没有得到满意的答案吗?为什么一直不结帖?

[解决办法]
int n(0); 看到这条语句的时候很奇怪,可以将n设为0清空.

我为上面的轻率话道歉,没有仔细编译.
1000的因数是15个,我想你将数组设为16大概是这个原因.
将数组大小设为20的时候还是只有两位数.但是设为25 26 27 28 29的时候屏幕就一直在打印
496是完数,因数是.....
数组设为30的时候就可以将三个完数打印出来了.

再次为上面轻率的发言道歉!

热点排行