21000を求めます。多倍長整数なので、計算が少し大変です。加算なら簡単です。1 + 1 = 2、2 + 2 = 4、4 + 4と計算していけば、1000回加算するだけです。加算は8桁ごとに区切って配列にしています。
@echo off setlocal echo %time% set /a N = 1000 set /a a.size = 1 set /a a_0 = 1 for /L %%k in (1, 1, %N%) do ( call :twice_long a ) rem call :print_long a call :sum_digits_long a echo %ERRORLEVEL% echo %time% exit /b 0 rem // %1を2倍 :twice_long set /a size = "%1.size" set /a k = 0 set /a carry = 0 :loop_add_long set /a e = "%1_%k%" * 2 + %carry% if %e% GTR 100000000 ( set /a %1_%k% = %e% - 100000000 set /a carry = 1 ) else ( set /a %1_%k% = %e% set /a carry = 0 ) set /a k += 1 if %k% LSS %size% goto loop_add_long if %carry% GTR 0 ( set /a %1.size = %k% + 1 set /a %1_%k% = %carry% ) exit /b 0 :sum_digits_long setlocal set /a size = "%1.size" set /a s = 0 set /a k = 0 :loop_sum_digits_long set /a e = "%1_%k%" call :sum_digits %e% set /a s += %ERRORLEVEL% set /a k += 1 if %k% LSS %size% goto :loop_sum_digits_long exit /b %s% :sum_digits setlocal if "%1" == "" exit /b 0 set /a n = %1 call :sum_digits %n:~0,-1% set /a ret = %n:~-1% + %ERRORLEVEL% exit /b %ret%