using System;
namespace rendom
{
class Rand
{
private long seed; //随机数种子//用系统时间作为随机种子
public Rand()
{
string str=DateTime.Now.Day.ToString();
str+=DateTime.Now.Hour.ToString();
str+=DateTime.Now.Minute.ToString();
str+=DateTime.Now.Second.ToString();
str+=DateTime.Now.Millisecond.ToString();
this.seed=long.Parse(str);
}
//用户自定义随机种子
public Rand(long Value)
{
this.seed=Value;
}//产生非负伪随机数
public long Next()
{
long l=this.seed;
l=l*l;
string strTime = l.ToString();
int w=strTime.Length/3;
string str=\"\";
for(int i=w;i<strTime.Length-w;i++)
str+=strTime[i];
l=long.Parse(str);
return l;
}
//产生上限为Value的伪随机数
public long Next(long Value)
{
if(Value<0)
return -1;
long l=this.seed;
l=l*l;
string strTime = l.ToString();
int w=strTime.Length/3;
string str=\"\";
for(int i=w;i<strTime.Length-w;i++)
str+=strTime[i];
l=long.Parse(str);
return l%Value;
}
//产生下限为minValue上限为maxValue的伪随机数
public long Next(long minValue,long maxValue)
{
if(minValue<0 || maxValue<0 || minValue>maxValue)
return -1;
long l=this.seed;
l=l*l;
string strTime = l.ToString();
int w=strTime.Length/3;
string str=\"\";
for(int i=w;i<strTime.Length-w;i++)
str+=strTime[i];
l=long.Parse(str);
return l%(maxValue-minValue)+minValue;
}
//伪随机数填充指定的比特数组
public void NextBytes(byte []buffer)
{
long Value = 0;
Value=this.Next()%255;
for(int i=0;i<buffer.Length;i++)
{
Value=Value*Value;
string strTime = Value.ToString();
int w=strTime.Length/3;
string str=\"\";
for(int j=w;j<strTime.Length-w;j++)
str+=strTime[j];
Value=long.Parse(str);
Value=Value%255;
buffer[i]=(byte)Value;
}
}
//产生0.0到1.0的伪随机数
public double NextDouble()
{
long l=this.Next(0,100000);
if(l==100000)
return 1.0;
l=l*l;
string strTime=l.ToString();
int w=strTime.Length/3;
string str = \"0.\";
for(int i=w;i<strTime.Length-w;i++)
str+=strTime[i];
double d=double.Parse(str);
return d;
}
}
class AppMain
{
static int Main()
{
Rand rand=new Rand();
//产生伪随机数
long n=rand.Next();
Console.WriteLine(n.ToString());
//产生100内的伪随机数
n=rand.Next(100);
Console.WriteLine(n.ToString());
//产生20到30之间的伪随机数
n=rand.Next(20,30);
Console.WriteLine(n.ToString());
//产生0.0到1.0之间的伪随机数
b=rand.NextDouble();
Console.WriteLine(b.ToString());
Console.ReadLine();
}
}
}
发现我NextDouble的实现很无赖
[此贴子已经被作者于2007-5-9 11:25:15编辑过]