バッチファイルでProject Euler(11)

Problem 4

まず、ある自然数が3桁の自然数同士の積になっているかどうかを調べるコードを書きましょう。999から降順に割っていって、割り切れたら積になっています。割り算の結果が自分以上になったら積がないことになります。

:is_product
    setlocal
    set /a d = 999
    :loop_is_product
        set /a q = %1 / %d%
        if %q% GTR %d% exit /b 0
        set /a r = %1 %% %d%
        if %r% == 0 exit /b 1
        set /a d -= 1
        goto :loop_is_product

次に、回文数になっているかどうかを調べるコードを書きましょう。これは再帰で簡単に書けます。

:is_palindromic
    setlocal
    if "%1%" == "" exit /b 1
    set n=%1
    set front=%n:~0,1%
    set back=%n:~-1%
    if %front% NEQ %back% exit /b 0
    call :is_palindromic %n:~1,-1%
    exit /b %ERRORLEVEL%

最初と最後の数字が一致するか見ます。違ってたら回文数でなく、一致すれば前後の数字を取り除いた数が回文数かどうか調べます。数がなくなったら回文数ということになります。
この2つを999999から順に調べればよいです。ただしこれは時間がかかります。