我有点困惑为什么在这段代码中,%rem%总是回到0(即使用素数进行测试)。有人可以帮帮我吗?谢谢:D
:PRIME
cls
echo What number would you like to check?
set /p num=
set num2=%num%-1
for /l %%i in (2 1 %num2%) do (
set /a rem=%num% %% %%i
)
if %rem% equ 0 goto NOT_PRIME
goto YES_PRIME
:YES_PRIME
echo %num% is a prime number.
goto AGAIN_PRIME
:NOT_PRIME
echo %num% is not a prime number.
goto AGAIN_PRIME
:AGAIN_PRIME
echo Would you like to check another number? (y/n)
set /p ans=
if '%ans%'=='y' goto PRIME
if '%ans%'=='n' goto START
这只是代码的一部分。问题是我测试的每个数字,我得到“%num%不是素数。”
答案 0 :(得分:1)
本节有两个问题:
set num2=%num%-1
for /l %%i in (2 1 %num2%) do (
set /a rem=%num% %% %%i
)
if %rem% equ 0 goto NOT_PRIME
首先,您需要使用set /a
对变量进行计算,因此它应该是:
set /a num2=%num%-1
其次,您的for
循环会正确运行所有计算,但您的if
行最终只会检查最后一次计算的结果。您需要启用延迟扩展,然后在if
循环中包含for
语句,如下所示:
for /l %%i in (2 1 %num2%) do (
set /a rem=%num% %% %%i
if !rem! equ 0 goto NOT_PRIME
)