随机数生成器与范围?C
Random Number generator with range? C++
我正在尝试为我的eBay业务制作15位数字的C 程序,但我希望第一个5位数字相同。
喜欢Ex:152328476529876 PIN:1000 152323123642345 PIN:9433 152321254213432 PIN:3222
我尝试制作一个随机数生成器,但我无法将其放在前5位数字相同的位置,但最后10位数字是相同的。与随机引脚。
#include <iostream>
#include <cstdlib>
const int maximum_number = 9999999999;
const int minimum_number = 1;
unsigned int i;
const int maximum_pin = 999;
const int minimum_pin = 0;
unsigned int pin;
int main()
{
// Print 100 random numbers
for (int count = 0; count <= 1000; ++count)
{
const int new_number = (rand() % (maximum_number - minimum_number)) + maximum_number;
const int new_pin = (rand() % (maximum_pin - minimum_pin)) + maximum_pin;
std::cout << "15232" << new_number << " Pin : "<< new_pin << "n";
}
return 0;
152321410094708 Pin : 1384
152321410073128 Pin : 1567 etc
我遇到的问题是前5个数字是相同的,这就是我想要的,但是14100保持相同,也应该随机化,而不仅仅是最后5位数字... p>加上别针只停留在1000,它们从未超过1999年等。
而不是使用rand()
和Modulo操作,应该使用C 11中的<random>
标头。使用N3847的Walter E. Brown的功能工具包,您可以使用:
#include <cstdint>
#include <iostream>
#include <iomanip>
#include <random>
const uint64_t maximum_number = 9999999999;
const uint64_t minimum_number = 1;
const uint64_t maximum_pin = 9999;
const uint64_t minimum_pin = 0;
const uint64_t prefix = 15232;
auto& global_urbg() {
static std::default_random_engine u{};
return u;
}
void randomize() {
static std::random_device rd{};
global_urbg().seed(rd());
}
uint64_t pick_a_number(uint64_t from, uint64_t thru) {
static std::uniform_int_distribution<uint64_t> d{};
using parm_t = decltype(d)::param_type;
return d(global_urbg(), parm_t{from, thru});
}
int main() {
randomize();
for (int count = 0; count < 100; ++count) {
const uint64_t new_number = pick_a_number(minimum_number, maximum_number);
const uint64_t new_pin = pick_a_number(minimum_pin, maximum_pin);
std::cout << prefix << std::setw(10) << std::setfill('0') << new_number
<< " Pin : " << std::setw(4) << std::setfill('0') << new_pin << "n";
}
return 0;
}
样本输出:
152325021252553 Pin : 1766
152327824160815 Pin : 7717
152321697896629 Pin : 3659
152320879192254 Pin : 8832
152325057425972 Pin : 2831
152323353939394 Pin : 1681
152324684928448 Pin : 9800
152328117866049 Pin : 4173
152326884989008 Pin : 4663
152320007759205 Pin : 7264
152327718061191 Pin : 3968
152322605655403 Pin : 8213
152324442390907 Pin : 7916
152322386351545 Pin : 4683
152321687805442 Pin : 3886
152328171047426 Pin : 6344
152327001747780 Pin : 2636
152325373164268 Pin : 3676
您的问题是,使用rand()生成一个随机数给您的数字至少在32767之间(取决于您的平台,请参见此处),并且此数字不够大。。另一个问题是数据类型int
没有足够的位来存储如此大的数量。
这都是非常依赖的平台,但这些都是最小的大小:
-
int
使用至少16位可以存储从0到65536的数字(如果未签名) -
long
使用至少32位可以存储0到4294967296(无符号) -
long long
使用至少64位可以存储从0到1844444444073709551616(如果未签名)
因此,由于它们不适合int内部,因此您已经对最大值遇到了问题。如果您想确定您的数字可以使用多大,则可以使用stdint.h
并使用uint64
,int32
等指定您的ints
。
您想要的是10个随机数字。可以通过这样的事情来实现:
for (int count = 0; count < 1000; count++) {
// leading number must not be 0
long long randomNumber = (rand() % 9) + 1;
for (int i = 0; i<9; i++) {
randomNumber *= 10;
randomNumber += rand() % 10;
}
std::cout << "15232" << new_number << "n";
}
PIN有一个类似的问题,我认为
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 制作具有平均值的随机数生成器
- C++ 随机数生成器:尝试将结果作为向量获取,但通过制作 void 函数来执行此操作而出现错误
- 尝试在 c++ 中创建随机数生成器并收到错误
- 存储并重新加载随机数生成器状态
- 作为随机数生成器的争用条件
- 播种随机数生成器以使用分叉的好方法是什么?
- 随机数生成器的性能因平台而异
- 随机数生成器的种子和状态有什么区别?
- RcppShark 随机森林示例引发有关随机数生成器的异常
- C++多个实例的随机数生成器组种子中增强
- C++随机数生成器仅生成 0 - C++ 11
- GSL+OMP:C++中的线程安全随机数生成器
- 贪吃蛇游戏 - 食物瓷砖的随机数生成器
- 随机数生成器在 C++ 用于 skipList.
- RSA 加密和解密期间的随机数生成器要求
- 如何使用 cpp 设置随机数生成器的语法?
- 随机数生成器与范围?C
- c++随机数生成器,允许用户选择范围
- 定义和播种具有全局范围的伪随机数生成器(C++)