簡體   English   中英

如何限制C ++中rand函數生成的數字

[英]How to limit the numbers generated by rand function in C++

我想要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

如何使其像我想要的輸出?

謝謝,謝謝您的幫助

如果要讓所有數字都包含相同的數字,則必須創建大量隨機數。 或使用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';

您可以生成一個介於100000000到999999999之間的隨機整數(所有9位數字),如下所示:

#include<cstdlib>

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

也可以看看

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

那么,您要查找的是一個介於100,000,000到999,999,999(含)之間的數字,或者等效地,等於100,000,000加上一個介於0到899,999,999(含)之間的數字:

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

但是,請注意有關模偏差常見警告 ,如果它們對您的應用很重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM