试图一次取一个随机数字

时间:2014-01-18 22:26:07

标签: c++ string random int

我是cpp编程的新手,也是stackoverflow的新手。

我有一个简单的情况和问题需要花费更多时间而不是合理的解决,所以我想我会在这里问。

我想一次从rand()取一个数字。我已设法剥离数字,但我无法将其转换为我需要的int因为它被用作数组索引。

有人可以帮忙吗?我很感激。

此外,如果有人有一个很好的解决方案来获得均匀分布的10个随机数,我也会喜欢这个...当然,rand max不是全部9s我们没有这一点。

KTM

3 个答案:

答案 0 :(得分:3)

您可以使用模数运算符来获取rand返回的数字。

int digit = rand()%10;

至于你的第一个问题,如果你有一个字符数字,你可以减去'0'的值来得到数字。

int digit = char_digit - '0';

答案 1 :(得分:3)

如果想要一个0到9的迂腐均匀分布,那么

  1. 假设rand()本身均匀分布。 (并不总是一个好的假设。)

  2. 根据需要再次致电rand()

    int ran10(void) {
      const static int r10max = RAND_MAX - (RAND_MAX % 10);
      int r;
      while ((r = rand()) >= r10max);
      return r%10;
    }
    
  3. 例:
    如果RAMD_MAX为32767,则r10max的值为32760. 32760到32767范围内的任何rand值都会被抛出,并且会获取一个新的随机值。

答案 2 :(得分:0)

虽然没有像rand() % 10这样的模运算实现那么快,但这将返回均匀分布的整数,并避免在一些伪随机数生成器中出现的最低有效位中的周期性(参见http://www.gnu.org/software/gsl/manual/html_node/Other-random-number-generators.html

int rand_integer(int exclusive_upperbound)
{
        return int((double)exclusive_upperbound*rand()/RAND_MAX);
}