[英]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.