C++中用rand()生成大随机数 |
您所在的位置:网站首页 › rand随机生成范围内 › C++中用rand()生成大随机数 |
需求:
前几天写程序时有一个需求是随机生成1000000个[0,1000000)之间的随机整数,当然首选是rand()和srand()。但是后来我查看生成的数据时发现,有很多数据都是3万多,但是没有4万以上的数据,这不符合常理。然后试验了几次后发现还是一样的情况,然后我就百度了一下,结果发现rand()生成的最大整数是32767,也就是说,我们使用rand()生成随机数的范围只能是[0,32767),这显然不符合要求。下面是解决方法: 法一:我在网上找了一下方法,发现了一种比较靠谱的方法,于是就试了试。语句是这样的: (int) ((double)rand() / RAND_MAX) * 1000000;RAND_MAX是C标准库中的一个宏,是中伪随机数生成函数rand()所能返回的最大数值,值为32767。上面语句的主要思路是,生成一个[0,1]范围内的double型随机数,然后乘以你需要的范围的最大值,比如我的话就乘1000000,之后取整一下得到的就是[0,1000000)。思路我觉得很正确,然后我就用这个方法生成了1000000个随机数,然后生成结果见下图: 这个方法的主要思路是根据生成随机数的范围,确定随机数的最大位数,比如我这里生成的是[0,1000000)内的整数,这里的整数就是0-999999,随机整数最大位数为6位。这里我们将每一个位数看做是一个随机数,事实上每一位就是一个随机数,说到这里大家可能就懂了,就是分别产生每一位对应的随机数,然后通过流拼接到一起,构成我们需要的随机数。下面附上代码(以生成[0,1000000)之间的随机数为例): #include #include #include ; #include #include using namespace std; int main(){ int u; int * u_arr; string u_str; u_arr = new int[6]; srand((unsigned int)(time(NULL))); for(int i = 0; i int num; int totalNum; srand((unsigned int)(time(NULL))); for(int i = 0; i num = rand() % 10; totalNum += num * pow(10, j); } cout |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |