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::srandstd::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位随机数?的主要内容,如果未能解决你的问题,请参考以下文章

Excel生成不重复的8位随机码

Excel生成不重复的8位随机码

js 生成UUID

随机数范围拓展,如:根据(1,5)随机数生成器,生成(1,7)之内的随机数

java随机生成6位随机数 5位随机数 4位随机数

C++生成随机数