[英]Trying to take 1 random digit at a time
我是cpp编程的新手,也是stackoverflow的新手。
我有一个简单的情况,一个问题花了比合理的时间更多的时间来解决,所以我想在这里问。
我想一次从rand()
中取一位数。 我设法去除了数字,但由于将其用作数组索引,因此无法将其转换为所需的int
。
有人可以帮忙吗? 我会很感激的。
另外,如果有人有很好的解决方案来获得以10为基数均匀分布的随机数,我也想这样做……当然,由于rand max并非全为9,我们就没有这个。
韩国电信
好了,您可以使用模运算符获得兰德返回的数字。
int digit = rand()%10;
关于第一个问题,如果您有字符数字,则可以减去'0'的值以获得数字。
int digit = char_digit - '0';
如果想要一个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
的值为r10max
将扔掉32760到32767范围内的所有rand值,并获取一个新的随机值。
尽管不如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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.