C++ 如何生成n位随机数?

C++ 如何生成n位随机数?,c++,c,C++,C,我试图生成n数字随机数。我可以生成一个随机数,但这里的情况是生成一个n数字。 我尝试将随机数存储在数组中,但我需要的是长格式,而不是数组。您需要做两件事: 了解如何在给定范围内输出随机数 计算出您需要的范围,以便只获得10位数字 第(1)部分实际上有点棘手,如果您想确保范围内的每个数字出现的可能性相等。幸运的是,C++11以后的标准库附带了一个名为uniform\u int\u distribution的工具,它可以为您进行所需的计算: // Create and seed the random

我试图生成
n
数字随机数。我可以生成一个随机数,但这里的情况是生成一个
n
数字。
我尝试将随机数存储在数组中,但我需要的是长格式,而不是数组。

您需要做两件事:

  • 了解如何在给定范围内输出随机数
  • 计算出您需要的范围,以便只获得10位数字
  • 第(1)部分实际上有点棘手,如果您想确保范围内的每个数字出现的可能性相等。幸运的是,C++11以后的标准库附带了一个名为
    uniform\u int\u 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";
    
    (注意,您需要一个C++14编译器来使用
    作为数字分隔符)

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

    using int_type = decltype(upper);
    
    这表示我们正在声明一个新的类型名
    int\u type
    ,它是
    upper
    类型的别名


    把它们放在一起,你就有了一个例程,可以在任何使用C++11的系统上输出10位数字。

    提示:
    n
    -数字是从
    10^(n-1)
    10^n-1
    的数字。如果你受过数学基础教育,你应该知道如何将数字数组转换成相应的数字。您只需要知道“532”是5x100+3x10+2x1。@在这种情况下,分布将不均匀。但他没有具体说明是否需要。它能有多大?它适合32位或64位整数吗?@davidschwartz,我在小学时没学过。
    using int_type = decltype(upper);