【问题标题】:c++ How to generate random number between 1 and 10^6? [duplicate]c++ 如何生成1到10^6之间的随机数? [复制]
【发布时间】:2016-08-30 14:22:59
【问题描述】:

我意识到rand() 可以生成的最大数字是 32767。无论如何我可以在没有外部库的情况下生成值在 1 到 10^6(100 万)之间的随机数吗?

【问题讨论】:

  • 如果你会使用C++11,en.cppreference.com/w/cpp/numeric/random
  • 你使用(古代)16位平台吗?
  • 1) 生成一个 1 或 2 的数字。 2) 如果是 1,则生成一个介于 1 和 10 之间的数字,如果是 2,则生成一个介于 1 和 10 之间的数字并加上 10.3) 泛化对于更大的数字
  • @JacekCz,例如任何 MSVC
  • @RiaD 我很惊讶,但是是的。C stdlih.h rand() 意见不佳,使用现代(如答案)

标签: c++ random


【解决方案1】:

不确定您所说的“外部库”是什么意思,但使用 C++11 random 库非常容易。

std::default_random_engine engine{std::chrono::steady_clock::now().time_since_epoch().count()};
std::uniform_int_distribution<int> range{1, 1'000'000};

int randomly_generated_number = range(engine);
int another_randomly_generated_number = range(engine);

对于通用随机数,我可能会建议使用 std::mt19937(或在 64 位机器上使用 std::mt19937_64)而不是 std::default_random_engine,但默认引擎更适合学习目的。

【讨论】:

  • 可以写1'000'000这样的数字吗?
  • @ArnavBorborah 不确定它是什么时候变成的(我认为是 C++14?),但撇号可以用作数字中的分隔符。
  • 是的,这是在 C++14 中实现的。 "可选的单引号 (') 可以插入数字之间作为分隔符。编译器会忽略它们。(C++14 起)" (en.cppreference.com/w/cpp/language/integer_literal)。
  • @FredLarson 感谢您的澄清,也感谢 Xirema
猜你喜欢
  • 2013-12-21
  • 2014-04-02
  • 2013-07-24
  • 2013-04-16
  • 1970-01-01
  • 2013-01-02
  • 2014-12-09
  • 1970-01-01
相关资源
最近更新 更多