读书人

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

发布时间: 2012-03-28 15:40:03 作者: rapoo

菜鸟问题:出现死循环!??
我用一个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的时候就可以将三个完数打印出来了.

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

读书人网 >C++

热点推荐