Generate a random number from 100000 to 1000000

Generate a random number from 100000 to 1000000. There is a running time, but the problem is that the number is constantly generated from 100000 to 170000, and 345956 or 742322 never happens. Tell me what I implemented wrong.

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";
}
Author: cpp questions, 2018-12-08

2 answers

Do not use rand() - it usually does not have a" scope " too large, see what RAND_MAX is equal to in your system. As a result, if this value is less than the required range, your method simply won't work.

Since you are working in C++, then generate these values taking into account the capabilities of <random> (see here):

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';
}
 2
Author: Harry, 2018-12-08 18:27:02

RAND_MAX is usually 32767. To generate numbers in a larger range, you can use the following construction:

    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";
    }
 1
Author: amiranys, 2018-12-08 18:48:42