int bigRand(int min, int max)
{
if (min > max)
{
min = max;
}
int rand1 = rand() % 10000;
int rand2 = rand() % 10000;
int randV = (rand1 * 10000 + rand2) % (max - min + 1);//改成这样
int randResult = min + randV;
return randResult;
}
10000以下和10000以上完全不相干,两次随机不相干。只有这样才能使正确的随机。
其实就是求模的时候,模式多少,第一次随机就要乘以多少。rand1乘以的是rand2的模。
百度了一下其他人的随机数。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
unsigned long ulrand(void) {
return (
(((unsigned long)rand()<<24)&0xFF000000ul)
|(((unsigned long)rand()<<12)&0x00FFF000ul)
|(((unsigned long)rand() )&0x00000FFFul));
}
int i;
unsigned long ul;
void main() {
srand(time(NULL));
for (i=0;i<10;i++) {
ul=ulrand();
printf("%010lu 0x%08xn",ul,ul);
}
}
还有这个简单点的:
int BigRand()
{
return RAND_MAX*rand() + rand();
}
其实都是通过移位的方式,移出那个随机数的最大值就行。
不过有个问题要考虑的,就是跨平台问题。不同平台的整形的长度可能不同,RAND_MAX也可能不同。总是移位,可能会出现数组越界。
所以为了安全起见还是用我写的两个10000最大值的随机数吧。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
注:相关教程知识阅读请移步到C++教程频道。










