项目欧拉问题5 分段故障: 11

问题描述 投票:0回答:1

我想解决 问题五 的欧拉工程,这是。

2520是最小的数字,可以被1到10的每一个数字所除,没有任何余数。被1到20的所有数字均匀除以的最小正数是多少?

我的程序符合要求,但当我执行它时,它显示以下信息。

Segmentation fault: 11

void integerDivision(int num)
{
    int i = 0;
    int smallestNumber = 0;
    int remainder = 0;
    int numbers[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                    11, 12, 13, 15, 16, 17, 18, 19, 20};

    for(int j = i; j < 20; j++)
    {
        remainder = num % numbers[j];
        if (remainder  == 0)
        {
            continue;
        }
        else
        {
            i = 0;
            integerDivision(num + 1);
        }  
    }
    smallestNumber = num / numbers[i];
    cout << smallestNumber << endl;
}

int main(void)
{
    integerDivision(1);
    return 0;
} 
c++ arrays fault
1个回答
0
投票

你可以试着调试一下你的代码,把数值的数量从20减少到5。

int numbers[] = {1, 2, 3, 4, 5};

for(int j = i; j < 5; j++)

你的代码有几个问题。

  1. 因为你调用的是 integerDivision(num + 1) 满打满算 num它将会产生一个指数级的增长,你的程序将会超时。为了解决这个问题,你可以添加 return; 之后 integerDivision(num + 1)
  2. 你的代码现在对于较小的数值,比如说10,但对于20还是会失败。你使用的是递归,这将导致大数的堆栈溢出。尝试用迭代来做类似的事情。
© www.soinside.com 2019 - 2024. All rights reserved.