在for循环中使用if语句

Kas*_*sen 2 for-loop if-statement batch-file

我正在尝试创建一个批处理文件来解决第一个Project Euler问题,http://projecteuler.net/problem=1,但我需要在循环中使用if语句来检查n modulo 3或5是否为0.总和突然停止了工作.

我的代码:

echo off

set sum=0
for /l %%n in (1,1,999) do (
    set a/ sum+=%%n *(only add if n%%3 == 0 or n%%5 == 0)*
)

echo %sum%
pause
Run Code Online (Sandbox Code Playgroud)

dbe*_*ham 5

这是一个非常有效的解决方案,虽然它有点混淆:

@echo off
setlocal
set /a sum=0
for /l %%N in (1 1 999) do set /a "sum+=%%N/!((%%N%%5)*(%%N%%3))" 2>nul
echo %sum%
Run Code Online (Sandbox Code Playgroud)

(%%N%%5)*(%%N%%3)如果%%N可以被3或5整除,则表达式产生零,或者如果它不能被任何整数则表示非零.所述!取反逻辑值,所以0变为1,并且非零变为0划分%%N由表达式产生任一%%N或除以零误差.因此,只需将整个表达式添加到总和中,并将错误消息重定向到nul.

最终结果 - 只添加可被3或5整除的数字:-)