我是cpp编程的新手,也是stackoverflow的新手。
我有一个简单的情况和问题需要花费更多时间而不是合理的解决,所以我想我会在这里问。
我想一次从rand()
取一个数字。我已设法剥离数字,但我无法将其转换为我需要的int
因为它被用作数组索引。
有人可以帮忙吗?我很感激。
此外,如果有人有一个很好的解决方案来获得均匀分布的10个随机数,我也会喜欢这个...当然,rand max不是全部9s我们没有这一点。
KTM
答案 0 :(得分:3)
您可以使用模数运算符来获取rand返回的数字。
int digit = rand()%10;
至于你的第一个问题,如果你有一个字符数字,你可以减去'0'的值来得到数字。
int digit = char_digit - '0';
答案 1 :(得分:3)
如果想要一个0到9的迂腐均匀分布,那么
假设rand()
本身均匀分布。 (并不总是一个好的假设。)
根据需要再次致电rand()
。
int ran10(void) {
const static int r10max = RAND_MAX - (RAND_MAX % 10);
int r;
while ((r = rand()) >= r10max);
return r%10;
}
例:
如果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);
}