【问题标题】:What are the Min and Max variable names length from one million variable names in C++? [closed]C ++中一百万个变量名的最小和最大变量名长度是多少? [关闭]
【发布时间】:2014-03-07 17:15:03
【问题描述】:

我有两个问题:

  1. 如果我们要声明一百万个具有相同长度的变量名,那么可以使用的最小长度应该是多少?

  2. 如果我们要声明一百万个任何可能有效长度的变量名,那么所需的变量名的最大大小是多少?

【问题讨论】:

  • 一百万个变量?您可能需要重新考虑您的设计。
  • “length”是指变量名的长度吗?
  • 如果所有变量都在不同的范围内,它们都可以命名为x,因此所需的最小长度为1。
  • @ᴍaroun ᴍaroun:也许这是对预处理器的压力测试,或者其他什么。
  • 我的猜测是,他真正想要的是一组 X 字符串,长度都相同。(例如“AA”,“AB”,“BA”“BB”)。允许一百万个排列所需的最短长度是多少?不过,他没有具体说明可以使用哪些字符,所以我们仍然无法回答。

标签: c++ math compiler-construction min maxlength


【解决方案1】:

如果我对您的理解正确,那么 C++ 有特殊的模板类 std::numeric_limits 允许获取任何算术类型的最大值和最小值。要使用它,您需要包含标题<limits>

例如,要获取 int 类型的最大值和最小值,您可以编写

#include <iostream>
#include <limits>

int main()
{
   std::cout << "The maximum value of int is " << std::numeric_limits<int>::max() << std::endl;
   std::cout << "The minimum value of int is " << std::numeric_limits<int>::min() << std::endl;
}

如果您询问所有一百万个具有相同长度的标识符的最小长度,那么您应该计算排列数,使n! 不小于一百万

【讨论】:

  • 他问的是名字的最大长度,而不是值。
  • @Ari 很难理解他在问什么。:)
【解决方案2】:

您至少有 53 个字符可用作变量名的第一个字符('a'-'z'、'A'-'Z' 和 '_')。然后你也可以使用数字,所以你有 63 个可能的字符。 53*63*63*63 &gt; 1 000 000,因此您不需要超过 4 个字符的名称。

变量名的长度仅取决于编译器。

【讨论】:

    【解决方案3】:

    这不是编程问题,而是数学问题。 要命名变量,我们必须使用字母 a-z、数字 0-9 和一些特殊字符(-、_)。 所以我们可以使用appr。 39个不同的字符。这是我们的字母表。因此,要存储 1000000 个名称,我们必须使用最小长度的名称:

    log(base39)(1000000) = ~3.8

    所以要命名百万个变量(以获得 1000000 个唯一名称),您必须在名称中使用至少 4 个字符。 (我知道不允许使用“023abc”变量名,但如果我们排除它们,结果不会有太大变化。

    答案:4 个字符。这是最小字符数。最大名称长度受您的编译器限制。

    【讨论】:

      【解决方案4】:

      标识符中的第一个字符必须是 a-zA-Z 或下划线,有 53 种可能性。后续字符也可以是数字0-9,有 63 种可能性。 所以n 字符给出了 53 * (63**(n-1)) 个合法标识符:

      Length Names
      1      53
      2      3339
      3      210357    // much less than 1000000
      4      13252491  // much more than 1000000
      

      其中一些是保留字(intreturn 等),我们不允许使用。其他的以下划线开头,C++ 标准对此不以为然。但是这些小考虑并没有改变答案,即 4(对于您的两个问题)。

      【讨论】:

      • 在变量名中也有很多有效的非字母数字字符 - 例如 unicode。
      • 除了以下划线开头的标识符外,还保留包含相邻下划线的标识符。
      猜你喜欢
      • 2010-12-10
      • 2010-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2012-07-18
      • 2015-11-24
      相关资源
      最近更新 更多