c++ - Project Euler 问题5 分段错误:11
问题描述
我正在尝试解决Project Euler 的问题 5,即:
2520 是可以除以 1 到 10 的每个数字而没有任何余数的最小数字。能被 1 到 20 的所有数整除的最小正数是多少?
我的程序符合要求,但是当我执行它时,它会显示以下消息:
分段错误: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;
}
解决方案
您可以尝试通过将值的数量从 20 减少到 5 来调试代码。
int numbers[] = {1, 2, 3, 4, 5}; for(int j = i; j < 5; j++)
你的代码有几个问题:
- 由于您要调用
integerDivision(num + 1)
所有不除的数字num
,因此它将产生指数增长,并且您的程序将超时。要解决此问题,您可以在return;
之后添加integerDivision(num + 1)
- 您的代码现在可以用于较小的值,例如 10,但对于 20 仍然会失败。您正在使用递归,这将导致大量的堆栈溢出。尝试用迭代做类似的事情。
推荐阅读
- angular - 如何在 nativescript Angular 中设置默认起始页
- ios - 如何在 iOS App 中授权 whatsapp?
- python - 值列表的运行函数
- python-3.x - 从 NOAA 下载数据的 python 脚本
- c# - 从 DropDownList 中抓取所选项目
- python - Jupyter 笔记本的 R 内核
- typescript - Typescript中对类的构造函数的类型引用?
- c# - 更新 ASP.NET Core 2.1 身份验证 Cookie 中的声明
- google-apps-script - Gscript 读取 gmail 附件
- go - 获取内部结构值