如何生成n位随机数?

时间:2016-03-14 03:15:20

标签: c++ c

我正在尝试生成n个数字随机数。我可以生成一个随机数,但这里的情况是生成一个n位数。 我尝试通过将随机数存储在数组中来实现它,但我需要它采用长格式而不是数组。

1 个答案:

答案 0 :(得分:1)

您需要做两件事:

  1. 了解如何输出给定范围内的随机数
  2. 找出您需要的范围,以便只获得10位数字
  3. 如果你想确保你的范围内的每个数字同样可能发生,那么第(1)部分实际上有点棘手。幸运的是,C ++ 11以后的标准库带有一个名为uniform_int_distribution的工具,可以为您完成所需的计算:

    // Create and seed the random number generator
    auto gen = std::mt19937{std::random_device{}()};
    // Create our desired distribution
    auto dist = std::uniform_int_distribution<int_type>{lower, upper};
    // Get numbers
    std::cout << dist(gen) << "\n";
    

    对于第(2)部分,我们需要弄清lowerupper应该在上面的内容。这实际上非常简单:最低的10位数字是1,000,000,000(10亿),最高的是9,999,999,999(一个不到100亿)。我们可以将这些数字直接写入C ++

    constexpr auto lower = 1'000'000'000;
    constexpr auto upper = 9'999'999'999;
    

    (注意,你需要一个C ++ 14编译器才能使用'作为数字分隔符。)

    现在,还有最后一个问题:在典型系统上,上面的lowerupper将是不同的类型,因为lower将适合intupper 1}}不会。所以我们需要确保输出使用两种类型中较大的一种。执行此操作的一种好方法是使用类型别名decltype

    using int_type = decltype(upper);
    

    这表示我们声明了一个新类型名称int_type,它是upper类型的别名。

    将这些放在一起,您将拥有一个例程,可以在任何使用C ++ 11的系统上输出10位数字。