Dav*_*vid -2 c math loops for-loop
我正在尝试解决项目euler的问题5,我得到的答案是错误的:
#include <stdio.h>
main()
{
int num;
int x = 0;
for (num = 20; x == 0; num++)
{
if ((num%1) == 0 && (num%2) == 0 && (num%3) == 0 && (num%4) == 0 && (num%5) == 0 && (num%6) == 0 && (num%7) == 0 && (num%8) == 0 && (num%9) == 0 && (num%10) == 0 && (num%11) == 0 && (num%12) == 0 && (num%13) == 0 && (num%14) == 0 && (num%15) == 0 && (num%16) == 0 && (num%17) == 0 && (num%18) == 0 && (num%19) == 0 && (num%20) == 0)
x = 1;
}
printf("%d %d", num, x);
}
Run Code Online (Sandbox Code Playgroud)
我的程序不断打印232792561
(我知道我正在打印x,这只是为了排除故障).
我得到的逐字输出是:232792561 1
.
我做了一些研究,我发现问题的正确答案是232792560
.我现在开始相信问题在于for循环.
循环首先做什么,迭代(num++
)或测试(x == 0
)?
小智 14
for循环可以转换为等效的while循环:
for (num = 20; x == 0; num++) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
是相同的
num = 20;
while (x == 0) {
// do stuff, then
num++;
}
Run Code Online (Sandbox Code Playgroud)
首先检查条件,然后执行循环体,然后执行增量.
(是的,正如其他人建议的那样,如果您break;
在需要时退出循环,则需要正确的结果,因为break;
立即跳出循环,因此最后一次不执行递增语句.)
执行循环体之后(如果有的话,因为首先运行初始化代码,然后检查条件以查看是否输入了正文),
因此,设置x
为1后,num
再次递增.
x
您可以简单地设置为1来结束循环,break;
而不是运行更新代码而退出循环.