C++生成25位随机数?
Posted
技术标签:
【中文标题】C++生成25位随机数?【英文标题】:C++ generate 25 digit random number? 【发布时间】:2014-03-19 16:53:42 【问题描述】:如何使用rand()
生成 25 位随机数并将其存储为字符串?
using namespace std;
int main(int argc, char **argv)
srand(time(0));
char arr[26] = 0;
for(int i = 0; i < 26; i++)
arr[i] = rand() % 10+ '0';
for(int i = 0; i < 25; i++)
cout << arr[i] << " ";
return 0;
此代码每次运行程序都会生成 25 个随机数。
同样,我需要生成一个 25 位数字并将其存储在一个数组中。
【问题讨论】:
向我们展示您迄今为止的尝试以及问题所在。 我知道如何生成 4-5 位数字。但不是 25 个数字... 你知道std::srand
和std::rand
之间的区别吗?
@AMZZ:在您整理好问题之前,这将遭受严重的反对(甚至可能导致您被禁止提问)。你想要一个 25 位的随机数吗?如果是这样,你什么时候提到“字符数组”?
仍不清楚。为什么标题与问题文本如此不同?你想要一个 25 位的随机数吗?
【参考方案1】:
这是我使用的逻辑,
int getRandom()
const int size = 10;
static int iBuff[10] = 0,1,2,3,4,5,6,7,8,9;
static int iPivot = 0;
if (iPivot >= size)
for(iPivot = 0; iPivot<size; iPivot++)
iBuff[iPivot] = iPivot;
iPivot = 0;
int iPos = rand()%(size-iPivot);
int rand = iBuff[iPos+iPivot];
//
// swap values at iPos and iPivot
//
int temp = iBuff[iPivot];
iBuff[iPivot] = iBuff[iPos+iPivot];
iBuff[iPos+iPivot] = temp;
iPivot++;
return rand;
int main ()
srand(time(NULL));
for (int iLoop=0; iLoop<25; iLoop++)
cout<<getRandom()<<endl;
getchar();
return 0;
【讨论】:
我不认为这会给你一个很好的分布,但它可能已经足够好了。另外,一点点const
会杀了你吗? ;)
或许你能解释一下逻辑?我很难看到这是如何生成一个 25 位数字的;它看起来更像是生成一组 8 个数字的随机排列,如果您调用它超过 8 次,则会出现未定义的行为。
嗯,我出去了一段时间,@mike 我的错,我没有正确阅读这个问题,我将其解释为,你想生成 0-25 之间的随机数......:p 和对于未定义的行为,如果调用超过 8 次,您可以在开始时添加检查,if(iPivot >= SIZE_MAX) return -1;
@Hulk 代码已更正,可以循环调用该函数,并且可以将输出存储到数组中,如问题中所述。关于不良做法和错误案例处理,我认为应该由将要使用代码的人来完成,至少我可以预料到。
@mike 需要进行细微更改来处理错误并将其从 8 位随机数转换为 25 位随机数。我希望我不需要告诉一些小事,我认为需要设置一个好的种子值才能使用 rand 函数。【参考方案2】:
声明一个包含 26 个字符的数组。在从零到二十四(包括)的循环中,在'0'
和'9'
之间生成一个随机值,并添加到数组中。使用字符串终止符终止数组。现在你有了一个包含 25 个随机十进制数字的 字符串。
对于实际的随机数生成,我建议你研究新的 C++11 random number functionality,尤其是 std::uniform_int_distribution
。
将其与standard algorithm library 中的std::generate
函数结合使用,只需几行代码即可完成。
【讨论】:
你能用 rand() 显示第一种方法的代码吗? @AMZZ 这基本上就是您的问题,但您有 26 位而不是 25 位,因此会覆盖结尾的零并且没有字符串。 ok.. 但程序生成 25 个随机数 而不是 25 位随机数 @AMZZ 但是这些数字中的每一个都是一个数字吗?请记住,您在输出的每个数字之间打印一个空格。因为代码,如您的问题所示,应打印 25 个随机数字。【参考方案3】:srand 只初始化了伪随机数生成器。
你可能想做这样的事情:
char array[26];
for(int x = 0; x < 26 ; x++)
array[x] = rand()%10 + '0';
array[25] = '\0'
【讨论】:
谢谢。但它只生成 25 个随机数。我需要生成 25 位数字并将其存储在数组中。以上是关于C++生成25位随机数?的主要内容,如果未能解决你的问题,请参考以下文章