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";
}
2
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