作为新的东西,我正在尝试用批处理脚本(https://projecteuler.net/problem=5)完成Project Euler Problem 5 .然而; 我遇到了一些问题.如果有人可以查看我的代码,那就太好了.
@ECHO off
SET init=1
SET iter=1
SET /a func=%init% %% %iter%
cls
:Num
IF func==0 (
IF iter==20 (
ECHO Val = %init%
pause
exit
) ELSE (
SET /a iter+=1
GOTO Num
)
) ELSE (
SET iter=1
SET /a init+=1
GOTO Num
)
Run Code Online (Sandbox Code Playgroud)
它的意思是检查是否init mod iter返回0,如果是,则将iter值加1 ,直到它达到21.如果它不等于0,则迭代计数将被设置回0并再次开始计算.
1 mod 1 = 0, Therefor add 1 to iter
1 mod 2 != 0, Therefor init is set to 0 and 1 is added to init
2 mod 1 = 0, Therefor add 1 to iter
2 mod 2 = 0, Therefor add 1 to iter
2 mod 3 != 0, Therefor init is set to 0 and 1 is added to init
Run Code Online (Sandbox Code Playgroud)
等等等等.
1 mod 1 != 0, Therefor add 1 to init
2 mod 1 != 0, Therefor add 1 to init
3 mod 1 != 0, Therefor add 1 to init
Run Code Online (Sandbox Code Playgroud)
等等等等.
这个怎么样:
@Echo off
setlocal enabledelayedexpansion
SET init=1
SET iter=1
cls
set loopCounter=1
set loopBatch=1
:numLoop
SET /a func="!init! %% !iter!"
IF !iter! == 21 (goto :done)
IF !func! == 0 (call :incIter) ELSE ( call :incInit)
SET /a loopCounter+=1
SET /a loopBatch="%loopCounter% %% 1000"
if !loopBatch! == 0 (echo %loopCounter% iterations done)
goto :numLoop
:incInit
rem echo %init% mod %iter% == %func%; Increasing init
SET iter=1
SET /a init+=1
goto :eof
:incIter
rem echo %init% mod %iter% == %func%; Increasing iter
SET /a iter+=1
goto :eof
:done
echo.
ECHO Val = %init%
Run Code Online (Sandbox Code Playgroud)