Batch file 是否有一个BATCH/CMD命令来检查一个数字是否是一个完美的正方形?

Batch file 是否有一个BATCH/CMD命令来检查一个数字是否是一个完美的正方形?,batch-file,cmd,perfect-square,Batch File,Cmd,Perfect Square,我正在尝试批量编写一个程序,将数字转换成简化的部首形式。有没有办法检查一个数字是否是一个完美的正方形?最简单的方法是使用嵌入的jscript代码。下面是一个接受数字的子程序的示例,该子程序根据数字是否是正方形打印是或否,如果是,则将errorlevel设置为1: @echo off call :isSquare 81 call :isSquare 7 call :isSquare 9 if errorlevel 1 ( echo 9 is a square number ) exit

我正在尝试批量编写一个程序,将数字转换成简化的部首形式。有没有办法检查一个数字是否是一个完美的正方形?

最简单的方法是使用嵌入的jscript代码。下面是一个接受数字的子程序的示例,该子程序根据数字是否是正方形打印是或否,如果是,则将errorlevel设置为1:

@echo off

call :isSquare 81
call :isSquare 7
call :isSquare 9

if errorlevel 1 (
    echo 9 is a square number
)
exit /b %errorlevel%


:isSquare
setlocal
set /a number=%~1

:: Define simple macros to support JavaScript within batch
set "beginJS=mshta "javascript:code(close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write("
set "endJS=)));""



:: FOR /F does not need pipe
for /f %%N in (
  '%beginJS% Math.sqrt(%number%) %endJS%'
) do set sqrt=%%N

if "%sqrt%" equ "%sqrt:.=%" (
    echo Yep!
    endlocal & exit /b 1

) else (
    echo Nope!
    endlocal & exit /b 0
)

endlocal

现在我正在考虑纯批处理解决方案(可能是检查包含所有34位平方数的列表?

最简单的方法是使用嵌入式jscript代码。下面是一个接受数字的子例程的示例,它根据数字是否为平方数打印是或否,如果是,则将errorlevel设置为1:

@echo off

call :isSquare 81
call :isSquare 7
call :isSquare 9

if errorlevel 1 (
    echo 9 is a square number
)
exit /b %errorlevel%


:isSquare
setlocal
set /a number=%~1

:: Define simple macros to support JavaScript within batch
set "beginJS=mshta "javascript:code(close(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write("
set "endJS=)));""



:: FOR /F does not need pipe
for /f %%N in (
  '%beginJS% Math.sqrt(%number%) %endJS%'
) do set sqrt=%%N

if "%sqrt%" equ "%sqrt:.=%" (
    echo Yep!
    endlocal & exit /b 1

) else (
    echo Nope!
    endlocal & exit /b 0
)

endlocal
现在我正在考虑纯批处理解决方案(可能是检查包含所有34位平方数的列表?

最简单的方法是使用PowerShell命令

@echo关闭
setlocal
电话:isSquare 25&&(
平方根是一个整数。
) || (
平方根是一个浮点数。
)
后藤:EOF
:isSquare
对于/f“tokens=2 delims=。”%%I in('powershell“[math]::Sqrt(%1)”)请退出/b 1
退出/b0
但它比Npcmaka的JScript宏慢


这是一个基于的纯批量解决方案。(有关详细信息,请参阅标有“二进制数字系统(基数2)”的部分。)
:sqrt
函数将错误级别设置为0(如果数字是完美的正方形),如果不是,则设置为非零;并为结果设置一个变量。相当快

@echo关闭
setlocal
set num=2147395600
调用:sqrt%num%foo&&(
调用回显%num%的平方根为%%foo%%
) || (
echo%num%不是一个完美的正方形
)
后藤:EOF
:sqrt
延迟扩展
设置/a“res=0,bit=1>=2”
转到:sqrt_loop1
)
:sqrt_loop2
如果%bit%neq为0(
设置/a resbit=res+bit
如果%num%geq!resbit(
设置/a“num-=resbit,res>>=1,res+=bit”
)否则设置/a“res>>=1”
设置/a“位>>=2”
转到sqrt_loop2
)
设置/a“ret=%~1-(res*res)”
endlocal&设置“%~2=%res%”和退出/b%ret%
最简单的方法是使用PowerShell命令

@echo关闭
setlocal
电话:isSquare 25&&(
平方根是一个整数。
) || (
平方根是一个浮点数。
)
后藤:EOF
:isSquare
对于/f“tokens=2 delims=。”%%I in('powershell“[math]::Sqrt(%1)”)请退出/b 1
退出/b0
但它比Npcmaka的JScript宏慢


这是一个基于的纯批量解决方案。(有关详细信息,请参阅标有“二进制数字系统(基数2)”的部分。)
:sqrt
函数将错误级别设置为0(如果数字是完美的正方形),如果不是,则设置为非零;并为结果设置一个变量。相当快

@echo关闭
setlocal
set num=2147395600
调用:sqrt%num%foo&&(
调用回显%num%的平方根为%%foo%%
) || (
echo%num%不是一个完美的正方形
)
后藤:EOF
:sqrt
延迟扩展
设置/a“res=0,bit=1>=2”
转到:sqrt_loop1
)
:sqrt_loop2
如果%bit%neq为0(
设置/a resbit=res+bit
如果%num%geq!resbit(
设置/a“num-=resbit,res>>=1,res+=bit”
)否则设置/a“res>>=1”
设置/a“位>>=2”
转到sqrt_loop2
)
设置/a“ret=%~1-(res*res)”
endlocal&设置“%~2=%res%”和退出/b%ret%

如果给定的数字不是一,则出现在的下面的纯批处理文件解决方案也会得到最接近的完美平方

@echo off
setlocal

cls
set /P "N=Enter a number: "

set /A "x=N/(11*1024)+40, x=(N/x+x)>>1, x=(N/x+x)>>1, x=(N/x+x)>>1, x=(N/x+x)>>1, x=(N/x+x)>>1, x+=(N-x*x)>>31, M=x*x"

if %N% equ %M% (
   echo %N% is perfect square
   goto :EOF
)

set /A "I=(x+1)*(x+1), ID=I-N, MD=N-M"
if %ID% lss %MD% set M=%I%
echo The closest perfect square is %M%

下面出现在的纯批处理文件解决方案,如果给定的数字不是一,也会得到最接近的完美平方

@echo off
setlocal

cls
set /P "N=Enter a number: "

set /A "x=N/(11*1024)+40, x=(N/x+x)>>1, x=(N/x+x)>>1, x=(N/x+x)>>1, x=(N/x+x)>>1, x=(N/x+x)>>1, x+=(N-x*x)>>31, M=x*x"

if %N% equ %M% (
   echo %N% is perfect square
   goto :EOF
)

set /A "I=(x+1)*(x+1), ID=I-N, MD=N-M"
if %ID% lss %MD% set M=%I%
echo The closest perfect square is %M%

停止批量写作,这里有很多替代语:“我不知道如何批量解决这个问题,所以你需要学习一门不同的语言。”——@rojo:非常好的评论
+oo
停止批量编写,这里有一个很好的替代说明:“我不知道如何批量解决这个问题,所以你需要学习另一种语言。”——@rojo:评论太好了
+oo
击败您获得纯批量解决方案
:)
让您找到纯批量解决方案<代码>:)