2

我想要 5 个不同的随机数,但生成的位数相同。

我有这个代码:

int main()
{
  srand(time(0));
  unsigned int num1 = rand();
  cout << "random number 1 = " << num1 << endl;
  unsigned int num2 = rand();
  cout << "random number 2 = " << num2 << endl;
  unsigned int num3 = rand();
  cout << "random number 3 = " << num3 << endl;
  unsigned int num4 = rand();
  cout << "random number 4 = " << num4 << endl;
  unsigned int num5 = rand();
  cout << "random number 5 = " << num5 << endl;
}

输出是:

random number 1 = 278203697
random number 2 = 2102275865
random number 3 = 1018298572
random number 4 = 1658370388
random number 5 = 429634923

同时,我想要的输出是它为所有数字生成相同数量的数字。例如:

random number 1 = 278203697
random number 2 = 210227586
random number 3 = 101829857
random number 4 = 165837038
random number 5 = 429634923

如何使它像我想要的输出?

谢谢,我很感激任何帮助

4

3 回答 3

4

如果您希望所有数字都包含相同的位数,您要么必须创建大量随机数。或者使用C++11 中引入的一些新功能std::uniform_int_distribution,比如类:

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(100000000, 999999999);

for (int n = 1; n <= 5; ++n)
    std::cout << "random number " << n << " = " << dis(gen) << '\n';

您也可以只设置输出的宽度,并用前导零填充它:

std::cout << std::setw(10) << std::setfill('0') << std::rand() << '\n';
于 2013-08-29T11:16:32.613 回答
-1

您可以生成一个范围从 100000000 到 999999999(所有 9 位数字)的随机整数,如下所示:

#include<cstdlib>

unsigned int num1 = rand()%900000000+100000000;

也可以看看

cstdlib RAND_MAX我的系统上是 2147483647(Debian Squeeze g++ 4.4)。

于 2013-08-29T11:15:51.147 回答
-2

那么,您要查找的是 100,000,000 到 999,999,999 范围内的数字,或者等效地,100,000,000 加上 0 到 899,999,999 之间的数字:

unsigned int n = 100000000 + rand() % 900000000;

但是,如果它们对您的应用程序很重要,请注意有关模偏差的常见警告。

于 2013-08-29T11:21:30.970 回答