【问题标题】:如何生成一个本身可以被七整除的七位随机数
【发布时间】:2022-01-23 04:43:43
【问题描述】:

我正在开发一个程序,所有部分都可以正常工作,除了一个,该部分应该生成一个可以被 7 整除的七位随机数。

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

知道怎么做吗?

【问题讨论】:

  • 你不能生成任何随机数(或至少在 1 到 306783378 之间)然后将结果乘以 7 吗?
  • 或者,既然您已经更新了您的问题,请使用介于 142,858 和 1,428,571 之间的随机数,然后将其乘以 7。
  • 对于您的预期任务,您是否将00000070777777 视为随机七位数字?还是不行?

标签: windows batch-file random generator


【解决方案1】:

你可以使用取模函数(见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%
)

以防万一,前导零是可以的,甚至是可能的:

@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%
)

【讨论】:

  • @furybowser - 我有点惊讶你接受了这个答案,因为它不能保证结果是 7 位数。
  • @SomethingDark:我认为这是微不足道的(并假设,OP 已经有一个 7 位数字,只想检查它是否是 7 的倍数),但为了正确地做到这一点,我编辑了我的答案.
  • 但你可能会得到以 0 开头的 7 位数字。
  • @Squashman 是的,我今晚梦见了这个。已编辑。
  • @3Dave: like set /a num=78/7*7 - 输出 77,因为 cmd 只能处理 32 位整数(无需“向下取整” - 忽略分数)
【解决方案2】:

这里有一个稍微不同的方法,它旨在传播一个名为 D7 的变量,其值为七位数,当除以七时将返回一个精确的整数:

第一个示例允许在结果值中前导 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多