CODE: [Copy to clipboard]
@echo off
setlocal enabledelayedexpansion
echo 正在进行计算...
echo.
set str1=123456789101112131415161718192021222324252627282930
set str2=123456789101112131415161718192021222324252627282930
echo %str1%
echo ×
echo %str2%
call :test %str1% "" ex
call :test %str2% _ ex_
for /l %%a in (0 1 %ex%) do (
for /l %%b in (0 1 %ex_%) do (
set /a mult=!num%%a!*!num%%b_!
set /a sum=%%a+%%b+1
rem 将所有的位数相同的数据全部加起来:例如,十位上的数字和十位上的数字相加;
set /a result!sum!+=!mult!
))
for /l %%a in (10000 -1 1) do (
if defined result%%a (
rem 定义前一位数字变量
set /a last=%%a-1
set var=!result%%a!
rem 如果该数大于10,则进位;
if !result%%a! GEQ 10 set /a result!last!+=!var:~0,-1!
set result=!var:~-1!!result!
)
)
echo.
echo =%result%
pause>nul
:test
for /l %%i in (0 1 100) do (
set var=%1
if "!var:~%%i,1!"=="" set /a %3=%%i-1 & goto :eof
rem 分别获得数字的千百万等位数;
set /a num%%i%2=!var:~%%i,1!)
说明:上述代码目前支持100位以内的数字相乘;对于以上代码起码还有另外的改进方案,可以提高运行效率,就是以前本人在另外一个帖子《用批处理作趣味数学题提过的,分段计算法,推荐使用5个数字分成一段,这样的话就可以避免大量的重复而频繁的计算,从而提高运行效率,至于后一种计算方法,还在测试阶段。