我需要在C++中生成一个四位随机数。
我使用了以下代码。
但它并不会给出完全随机的数字。
我使用了以下代码。
#include<time.h>
int number;
number=rand()%1000;
srand ( time(NULL) );
但它并不会给出完全随机的数字。
#include<time.h>
int number;
number=rand()%1000;
srand ( time(NULL) );
number = rand() % 9000 + 1000;
有9000个四位数,对吧?从1000到9999。 rand()
会返回从0到RAND_MAX
的一个随机数。rand() % 9000
将从0到8999,rand() % 9000 + 1000;
将从1000到9999。一般而言,如果您想要一个从a到b(含)之间的随机数,公式为:
rand() % (b - a + 1) + a
还要注意,srand()
应该只被调用一次,并在任何rand()
之前调用。
如果你把0到999之间的数字包括在“四位数”里,请在这种情况下使用rand()%10000
。我不认为它们是四位数,但以防万一,我涵盖了所有可能性。
希望对你有帮助
srand
以获得“完全随机的数字”。 - log0srand(time(0))
之前插入sleep(1)
,以便更好地选择种子。这将避免不可避免的“为什么我的随机序列不随机?”的问题 :-) - paxdiablo记得只调用srand
一次。
如果你不喜欢rand
的分布,请查看Boost.Random。
// produces randomness out of thin air
boost::mt19937 rng;
// distribution that maps to 1000..9999
boost::uniform_int<> fourdigits(1000,9999);
// glues randomness with mapping
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, fourdigits);
// simulate rolling a die
int x = die();
boost::uniform_int<> fourdigits(1000, 9999)
比rand() % 9000 + 1000
更合乎逻辑。 - dalle在调用rand()
之前,您必须先使用随机生成器srand
进行种子初始化。
#include<time.h>
srand( time(NULL) );
int number = rand() % 10000; // number between 0 and 9999