C++ 中的蒙查森数

2025年5月17日 | 阅读 6 分钟

在本文中,我们将讨论如何使用示例检查一个数字是否是蒙克豪森数

什么是蒙克豪森数?

蒙克豪森数是具有特殊性质的不同数字。如果一个数字的(单个)数字之和求幂后等于初始数字,则该数字被认为是蒙克豪森数。这些数字很罕见,因此尚未广为人知。通过使用定义 0^0 = 0,我们也可以将 0 归类为蒙克豪森数。

问题陈述

问题是确定当每个数字的幂求和后产生一个等于 n 的数字时,n 是否是蒙克豪森数。如果它是蒙克豪森数,程序需要返回 true。否则,它应该返回 false 值。

示例

输入 1

输出: True

  • 提升到 1 次方,结果是 1。因此,它返回 true。

方法 1:暴力方法

这种方法允许使用范围内的每个数字,计算数字的幂之和,并将其与原始数字进行比较。找到这个乘积本身是一个耗时的过程,我们可以尝试小范围。

示例

让我们举一个例子来说明如何在 C++ 中使用暴力方法来求蒙克豪森数。

输出

Please enter the range of numbers(initial and last) :1 100
The Munchausen numbers in the given range  [1, 100] are:
1

说明

该程序包含 3 个函数

1. sumOfPowers(int num)

  • 此函数需要传递一个整数作为 num 参数。
  • num 是它计算的数字,如下所示:n=(digits[0]^0)+(digits[1]^1)+(digits[2]^2)+。而 digits[n-1] ** (n-1) 确定与参数 n 相关的风险。
  • 我们这里只遵循循序渐进的方法,从最低有效位开始,逐一向上计数。每个数字的数字给出一个复合数字,该数字乘以 **_pow()_**。这个幂的结果加到总和中就是总和本身。计算幂的总和。

2. findNumbersBruteForce(int s, int f)

  • 此函数接收两个参数,**_s_** 和 **_f_**,其中第一个是起始点,最后一个是范围的结束点。
  • 生成器函数生成从 ab 到 bk 的蒙克豪森伪随机整数。
  • 它弥合了世界范围内模拟环境的执行。
  • 接下来,**_sumOfPowers()_** 函数找到“每个数字的每个数字的幂之和”的乘积之和。
  • 当条件匹配时,打印该语句。

3. main()

  • main 函数已实现,它是程序的初始部分。
  • 它允许用户通过使用起点和终点作为问题来输入数字范围。
  • 用户定义程序将生成的数字范围。
  • 主要任务将从其他函数发送的范围参数作为其选项。
  • **_findMunchausenNumbersBruteForce()_** 函数将用于检测蒙克豪森数。
  • 之后,它将返回整数值 0,表示操作成功。

方法 2:使用优化

计算每个求和的数字的幂将花费大量时间。因此,通过提前计算值然后将它们保存在数组中,算法所花费的时间不会减少。但是,对于查找表,我们已经定义了所有要用于快速检查数字是否相等的值。

示例

让我们举一个例子来说明如何在 C++ 中使用优化方法来求蒙克豪森数。

输出

Please enter the range of numbers(initial and last) :1 2000
The Munchausen numbers in the given range  [1, 2000] are:
1

说明

代码包含 3 个函数

1. sumOfPowers(int num, const vector<int>& power)

  • 此任务将整数 num 作为输入,并将指向先前计算的数字幂的常量指针变量 power 作为输入。
  • 它对数字 num 中的所有数字执行求和。
  • 之后,迭代遍历“num”的数字,使用 powers 向量恢复每个预先计算的幂。然后将其加到 **_“total_sum”_** 中并计算所得的幂的总和。

2. findNumbersBruteForce(int s, int f)

  • 此函数接收两个参数 s 和 f 作为参数,它们分别是范围的起点和终点。
  • 它在特定范围 [s, f] 的数字之间生成蒙克豪森数。
  • 该函数首先创建一个大小为 10 的向量,该向量使用循环存储预先计算的数字指数。
  • 迭代从 s 运行到 f,使用从 s 到 f 的每个数字。
  • 对于每个数字,它使用 sumOfPowers() 函数验证该数字是否等于数字值的总和。

3. main()

  • **_findMunchausenNumbers()_** 函数将范围传递给调用 findMunchausenNumbersBruteForce() 函数。

结论

总之,上面的代码包含两个用于**_蒙克豪森问题_**的 C++ 解决方案,唯一的区别在于它们实现目标的方式。暴力方法通过在范围内搜索每个具有后一个特征的数字来重复一系列操作。改进的程序包括在计算生成量之前计算幂,以确定数字的幂之和。

这两种技术都有效,并且必须以相同的速率使用;蒙克豪森列表的长度随测量间隔的频率而变化。通过简化的程序,重复的算术运算已减少,尤其是在多次测量的情况下。然而,暴力搜索方法对于小型批判来说是最佳的。我们需要确保输入的范围有效,并且用户输入正确的值才能获得正确的输出。总的来说,它有助于人们研究特定区间或一般区间内的蒙克豪森数,因为解决方案的选择取决于区间。