まず、ある自然数が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から順に調べればよいです。ただしこれは時間がかかります。