批处理文件 – 在批处理脚本中执行模数运算

作为新的东西,我正在尝试使用批处理脚本(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
)

它的意思是检查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

等等等等.

DOES发生的一个例子:

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

等等等等.

任何帮助表示赞赏,谢谢.

最佳答案
这个怎么样:

@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% 

转载注明原文:批处理文件 – 在批处理脚本中执行模数运算 - 代码日志