C++ 中的自传数字

2025年5月10日 | 阅读 4 分钟

一个自传数 (n) 是一个在指定基数下的 b 位整数。在这个数中,位置 p 处的每个数字(最高有效数字在位置 0,最低有效数字在位置 (b−1))反映了数字 p 在该数中出现的次数。

示例

10020100

要在基数 4 中具有自传性,位置 p 处的每个数字(从位置 0 的最高有效数字开始)必须反映该数字在该数中出现的次数。

10020100 的逐步验证

  1. 第一个数字(位置 0):数字是 1,表示该数中应该有一个零。数字 10020100 恰好包含一个零,因此满足此要求。
  2. 第二个数字(位置 1):数字是 0,表示该数中不应该有 1。数字 10020100 没有 1,因此满足此标准。
  3. 第三个数字(位置 2):第三个数字(位置 2)是 0,表示该数中不应该有 2。数字 10020100 包含两个 2,因此不满足该条件。

方法

  1. 确定范围:使用公式 [10^(n− 1),10^n− 1] 计算 N 位数字的范围。检查此范围内的每个数字以确定它是否是自传数。
  2. 将数字转换为字符串:将数字转换为字符串可以方便地访问每个数字和位置。
  3. 遍历每个数字:使用外部循环遍历字符串的每个数字,将当前值作为预期计数存储在变量中。
  4. 计算数字出现次数:要计算数字出现次数,请使用内部循环将当前的外部循环索引与字符串中的每个数字进行比较。如果它们匹配,则增加该数字出现的次数。如果它们匹配,则增加该数字出现的次数。
  5. 检查自传条件:要检查自传条件,请将数字的实际出现次数(来自内部循环)与变量中的预期计数进行比较。如果所有数字都满足此要求,则该数字是自传数。
  6. 对范围内的所有数字重复:检查每个数字并打印它是否满足自传要求。

示例

让我们举一个例子来说明 C++ 中的自传数

输出

 
Enter the length of the number: 7
Autobiographical numbers with 7 digits:
3211000   

说明

该代码是一个 C++ 程序,用于查找具有特定数字长度的自传数。自传数是指其中位置“i”处的每个数字代表该数中该数字出现次数的数字。isAutobiographical 函数通过计算数字的数量并将其与预测值进行比较来验证此要求。findAutobiographicalNumbers 函数为提供的长度生成范围内的数字,使用 isAutobiographical 函数验证每个数字,并打印所有有效结果。该应用程序接受用户输入以获取所需的数字长度,并优雅地处理用户输入。