我如何生成一个七位数的随机数,它本身可以被七整除

How do I generate a seven digit random number which is itself divisible by seven

我正在编写一个程序,除一个部分外,所有部分都运行良好,该部分应该生成一个可被 7 整除的七位随机数。

我知道我也有类似的问题,但我没有在其中找到我的答案,尽管我尝试过,但我自己也只能生成这样一个数字。

知道怎么做吗?

您可以使用取模函数(参见set /?):

@echo off
setlocal

set "number=%random%%random%%random%%random%%random%%random%%random%"
set "number=%number:~0,7%"
set /a remainder=number %% 7
if %remainder% equ 0 (
  echo %number% is a multiple of 7
) else (
  echo %number% divided by 7 gives a rest of %remainder%
)

以防万一,前导零 is/are 可以,甚至可能需要:

@echo off
setlocal

set "number=%random%%random%%random%%random%%random%%random%%random%"
set "number=%number:~-7%"
set /a remainder=7%number% %% 7
if %remainder% equ 0 (
  echo %number% is a multiple of 7
) else (
  echo %number% divided by 7 gives a rest of %remainder%
)

这里有一个稍微不同的方法,它被设计用来传播一个名为 D7 的变量,它有一个七位数的值,当它被七除时将 return 一个精确的整数:

第一个示例允许在结果值中使用前导 0

Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "D7="
For /L %%G In (0 1 9) Do For %%H In (
    %Random:~-1%%Random:~-1%%Random:~-1%%Random:~-1%%Random:~-1%%Random:~-1%
) Do (Set /A D7 = 7%%H%%G %% 7
    SetLocal EnableDelayedExpansion & If !D7! Equ 0 (EndLocal
        Set "D7=%%H%%G"
        GoTo :Next))
:Next
Set D7
Pause

请注意:结果值可能是 0000000,因为前导 0 是允许的,并且 0 可以被每个整数整除。


如果您不想使用前导 0,则需要进行非常小的调整:

@Echo Off
SetLocal EnableExtensions DisableDelayedExpansion
Set "D7="
For /L %%G In (1 1 9) Do For %%H In (
    %Random:~-1%%Random:~-1%%Random:~-1%%Random:~-1%%Random:~-1%%Random:~-1%
) Do (Set /A D7 = %%G%%H %% 7
    SetLocal EnableDelayedExpansion & If !D7! Equ 0 (EndLocal
        Set "D7=%%G%%H"
        GoTo :Next))
:Next
Set D7
Pause