闲来无事,学习下老朋友C++的随机数~
#include<iostream.h>
#include<time.h>
#include<stdlib.h>
const double MinProb=1.0/(RAND_MAX+1);
bool happened(double probability)//probability 0~1
{
if(probability<=0)
{
return false;
}
if(probability<MinProb)
{
return rand()==0&&happened(probability*(RAND_MAX+1));
}
if(rand()<=probability*(RAND_MAX+1))
{
return true;
}
return false;
}
long myrandom(long n)//产生0~n-1之间的等概率随机数
{
int t=0;
if(n<=RAND_MAX)
{
long r=RAND_MAX-(RAND_MAX+1)%n;//尾数
t = rand();
while ( t > r )
{
t = rand();
}
return t % n;
}
else
{
long r = n%(RAND_MAX+1);//余数
if( happened( (double)r/n ) )//取到余数的概率
{
return n-r+myrandom(r);
}
else
{
return rand()+myrandom(n/(RAND_MAX+1))*(RAND_MAX+1);
}
}
}
int main(int argc, char* argv[])
{
int num = 0;
int result = 0;
system("color 70");
while(true){
cout<<"输入一个你要玩耍的数字【1---任意】,如果想要抛弃我,请按0键"<<endl;
cin>>num;
cout<<endl;
if(num == 0) {
break;
}
while(num <= 0) {
cout<<"不要闹,输入一个你要玩耍的数字【要大于1哦】"<<endl;
cin>>num;
cout<<endl;
}
result = myrandom(num);
cout<<"根据你输入的数字,获取的随机数是:"<<result<<endl;
system("pause");
}
return 0;
}