Сгенерированть рандомное число от 100000 до 1000000

148
07 июня 2019, 03:50

Сгенерировать рандомное число от 100000 до 1000000. Есть наработка, но проблема в том, что число постоянно генерируется от 100000 до 170000, а 345956 или 742322 никогда не бывает. Подскажите, что не так я реализовал.

srand(time(NULL));
const int MIN = 100000;
const int MAX = 1000000;
int desiredNumber = rand() % 9 + 1;
int generateNumber = rand() % (MAX - MIN) + MIN;
int generatedNumber = 0;
int numberCoincidences = 0;
generatedNumber = generateNumber;
while (generateNumber)
{
    int temp = generateNumber % 10;
    if (temp == desiredNumber)
    {
        numberCoincidences++;
    }
    generateNumber = (generateNumber - temp) / 10;
}
if (numberCoincidences)
{
    cout << "Numeric " << desiredNumber << " in number " << generatedNumber << " is found " << numberCoincidences << "  times\n";
}
else
{
    cout << "Numeric " << desiredNumber << " in number " << generatedNumber << " does not occur\n";
}
Answer 1

Не стоит использовать rand() - обычно у него "размах" не слишком велик, посмотрите, чему равно RAND_MAX в вашей системе. В результате, если это значение меньше требуемого диапазона - ваш метод просто не будет работать.

Раз уж вы работаете на C++, то генерируйте эти значения с учетом возможностей <random> (см. тут):

using namespace std;
int main()
{
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<> dis(100000, 1000000);
    for (int n = 0; n < 50; ++n)
        cout << dis(gen) << '\n';
}
Answer 2

RAND_MAX обычно равно 32767. Для генерации чисел в большем диапазоне можете использовать следующую конструкцию:

    srand(time(NULL));
    const int MIN = 100000;
    const int MAX = 1000000;
    int desiredNumber = rand() % 9 + 1;
    int generateNumber = (rand() % 9)       + 
                         10*(rand() % 9)    + 
                         100*(rand() % 9)   + 
                         1000*(rand() % 9)  + 
                         10000*(rand() % 9) + 
                         100000*(rand() % 9 + 1);
    int generatedNumber = 0;
    int numberCoincidences = 0;
    generatedNumber = generateNumber;
    while (generateNumber)
    {
        int temp = generateNumber % 10;
        if (temp == desiredNumber)
        {
            numberCoincidences++;
        }
        generateNumber = (generateNumber - temp) / 10;
    }
    if (numberCoincidences)
    {
        cout << "Numeric " << desiredNumber << " in number " << generatedNumber << " is found " << numberCoincidences << "  times\n";
    }
    else
    {
        cout << "Numeric " << desiredNumber << " in number " << generatedNumber << " does not occur\n";
    }
READ ALSO
C++ winsock proxy

C++ winsock proxy

возникла задача написать TCP клиент, который будет посылать запросы на сервер через прокси, вроде всё сделал, но так и не понял как отправлять...

133
Задача на циклы

Задача на циклы

Даны два двузначных числа А и ВИз этих чисел составили 2 четырехзначных числа: первое число получили путем написания сначала числа А, затем...

107
Как исправить ошибку std::out_of_range

Как исправить ошибку std::out_of_range

Перевожу string в intВсе работает, но затем кидает ошибку

128
Удаление из строки всего, кроме цифр

Удаление из строки всего, кроме цифр

Проблема в том, что в консоли ничего не выводится(Не уверен что сделал правильно)

109