我正在嘗試在批處理中編寫一個程序,將數字放入簡化的激進形式。有沒有辦法檢查一個數字是否是一個完美的正方形?是否有BATCH/CMD命令檢查數字是否是完美的正方形?
0
A
回答
2
最簡單的方法是用與接受打印張數是或否取決於如果數量爲方形或不併設置1 ERRORLEVEL如果它是一個子程序嵌入的JScript code.Here的例子:
@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
現在我想的是純粹的單批溶液(可檢查所有34bit平方數列表?)
+1
擊敗純粹的批次解決方案。 ':)' – rojo
2
的最簡單的方法是使用PowerShell命令。
@echo off
setlocal
call :isSquare 25 && (
echo The square root is an integer.
) || (
echo The square root is a float.
)
goto :EOF
:isSquare <num>
for /f "tokens=2 delims=." %%I in ('powershell "[math]::Sqrt(%1)"') do exit /b 1
exit /b 0
它比npocmaka的JScript的宏觀慢,但。
以下是基於algorithm found on Wikipedia的純批處理解決方案。 (有關詳細信息,請參見標有「二進制數字系統(基數2)」的部分。)如果數字是完美平方,:sqrt
函數會設置錯誤級別0,如果不是,則爲非零;併爲結果設置一個變量。這很快。
@echo off
setlocal
set num=2147395600
call :sqrt %num% foo && (
call echo The square root of %num% is %%foo%%
) || (
echo %num% is not a perfect square
)
goto :EOF
:sqrt <num> <return_var>
setlocal enabledelayedexpansion
set /a "res = 0, bit = 1 << 30, num = %~1"
:sqrt_loop1
if %bit% gtr %num% (
set /a "bit >>= 2"
goto :sqrt_loop1
)
:sqrt_loop2
if %bit% neq 0 (
set /a resbit = res + bit
if %num% geq !resbit! (
set /a "num -= resbit, res >>= 1, res += bit"
) else set /a "res >>= 1"
set /a "bit >>= 2"
goto sqrt_loop2
)
set /a "ret = %~1 - (res * res)"
endlocal & set "%~2=%res%" & exit /b %ret%
+1
非常好:) ... – npocmaka
2
下純批處理文件解決方案,出現在this question,還可以獲得最接近完美的正方形,如果給定的數字是不是一個。
@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%
相關問題
- 1. 檢測一個double是否是Java中的完美正方形
- 2. 如何檢查一個整數是否是一個完美的正方形
- 3. 如何檢查命令是否完成?
- 4. 如何確定Int是否是Haskell中的完美正方形?
- 5. 檢查矩陣是否正方形? (Python)
- 6. 檢查字形是否呈現「正確」
- 7. sql是否有命令來檢查一行是否爲零?
- 8. 檢查參數是否爲ProcessBuilder是一個有效的命令
- 9. 檢查一棵樹是否是一棵完美的樹
- 10. 完美的正方形,如果,否則
- 11. 是否有命令檢查實體框架中是否存在數據庫?
- 12. 是否有方法檢查所有數組項是否爲'0'?
- 13. 如何檢查命令是否存在?
- 14. 檢查命令是否產生輸出
- 15. 如何檢查命令是否成功?
- 16. 檢查命令是否存在
- 17. Php檢查shell_exec命令是否成功
- 18. 是否有命令檢查某個數組的數值?
- 19. Python 3:檢查一個字符串是否是導入命令
- 20. 檢查字符串是否有數字
- 21. 檢查QVariantAnimation是否完成?
- 22. 檢查是否數字
- 23. 檢查圖形是否是雙向的
- 24. 檢查是否有關於命令沒有參數
- 25. 檢查數字是否有小數點
- 26. 在php中是否有任何語法或命令來檢查數字是否在一組數字中?
- 27. 檢查是否有
- 28. 檢查變量是否是數字
- 29. 如何檢查ID是否是數字?
- 30. 檢查JTextField是否是數字
停止寫作批次,有很大的選擇 – Marged
翻譯:「我不知道如何在批量解決這個問題,所以你需要學習不同的語言。」 - [Marged](http://stackoverflow.com/users/1354537/marged) – rojo
@rojo:優秀的評論! **'+ oo' ** – Aacini