每当我启动程序时,都会出现Windows弹出窗口,并显示“test.exe已停止工作”。我的编译器没有错误。这是我的代码。我已经提到了错误发生的地方,但我无法弄明白。
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long factor[999], halfof;
int i;
long long num = 600851475143;
halfof = num / 2;
for (i = 0; i < 999; i++){
factor[i] = 0;
}
//GETTING ERROR IN THIS "FOR LOOP"
for (i = 2; i <= halfof; i++){
if (num % i == 0){
factor[i] = i;
}
}
for (i = 0; i < 999; i++){
printf("%ld", factor[i]);
}
return 0;
}
答案 0 :(得分:5)
从代码中的代码段下方开始:
long long factor[999], halfof;
long long num = 600851475143;
halfof = num / 2;
这会使halfof
方式超过999
,这是factor
的最大元素。
此处:factor[i] = i;
您正在进行超出数组访问,这可能会导致segmentation fault(如果您很幸运)。
答案 1 :(得分:2)
您对数字进行分解的代码是错误的 - 您不应该使用i
来跟踪factor
的索引。您需要单独跟踪分配了自己索引的最后一个使用因子(我为此添加了一个变量)
根据其他评论,您还需要i
一个long long
,以便它可以跟踪num
。您还可以考虑增加factor
中的元素数量来处理具有大量因子的数字(这些数字可能非常小)。
查找num
的所有独特因素:
long long i;
int factorIndex = 0;
for (i = 2; i <= halfof; i++){
if (num % i == 0){
factor[factorIndex++] = i;
}
}
for (i = 0; i < factorIndex ; i++){
printf("%ld ", factor[i]);
}
备注强>
答案 2 :(得分:1)
问题
数组索引
在factor[i] = i
中,您将数组从2索引。
你留下索引0,1空白
循环超过数组大小
600851475143/2 > 999