我想生成一个0到100 000之间的10000整数的文件,这样我可以稍后对它们进行MergeSort。无法为整数生成全范围的随机数
当我生成使用fstream的文件,我永远无法32760.
以下方法生成该文件的整数,并且然后读回,并检查用于通过32750.任何整数I一般为3-5之间得到32750和32760之间的整数。为什么会发生这种情况,我该如何解决?它是种子问题还是Random函数的实际使用?
// sizeOfArray = 10000
void generateFile() {
ofstream fout("unsorted.txt");
srand(time(NULL));
// Generating the file
int num;
for(int i = 0; i < sizeOfArray; i++) {
num = rand() % 100000;
if(i < sizeOfArray-1)
//fout << i+1 << ": " << num << endl;
fout << num << endl;
else
//fout << i+1 << ": " << num;
fout << num;
}
// Reading the File Back
ifstream fin("unsorted.txt");
for(int i = 0; i < sizeOfArray; i++) {
fin >> num;
if(num > 32750)
cout << num << endl;
}
cin.get();
}
解决
使用回答下面提供我所生成的文件500倍
和我收到的最大整数为99931.
这就是随机数发生器的范围。使用不同的随机数发生器,或者采用两个随机数并将它们合并为一个。 – 2013-04-09 18:00:16
根据cplusplus.com,rand()的范围是'0 - RAND_MAX'。 'RAND_MAX'是依赖于库的,但应该至少为'32767'。 – OGH 2013-04-09 18:01:31
你知道一个随机数字发生器,可以给我所需的范围吗? – Gander7 2013-04-09 18:01:33