C++ 中的克里希那穆提数

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

在许多情况下,编程和数学密切相关,这使开发人员能够尝试酷炫有趣的难题。其中一个有趣的L概念就是 Krishnamurthy 数或强数。在本文中,我们将了解 Krishnamurthy 数的定义,并讨论问题定义及其在 C++ 编程语言中的解决方案。

什么是 Krishnamurthy 数?

Krishnamurthy 数是指其各位数字的阶乘之和等于其本身的数。例如,我们考虑 Krishnamurthy 数 145

1! + 4! + 5! = 1 + 24 + 120 = 145

问题陈述

编写一个 C++ 程序来检查给定数字是否是 Krishnamurthy 数。该程序应:

  1. 接受一个整数作为输入。
  2. 计算数字的每个位数的阶乘。
  3. 将数字的阶乘求和。
  4. 将总和与原始数字进行比较,并确定它是否是 Krishnamurthy 数。

方法和解决方案

为了解决这个问题,我们将

  1. 使用函数计算数字的阶乘。
  2. 遍历数字的每个位数以计算阶乘之和。
  3. 检查总和是否与原始数字匹配。

示例 1

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

输出

Enter a number: 145
145 is a Krishnamurthy Number.   

代码解释

  1. 阶乘函数:该函数简单地通过一个简单的循环计算数字的阶乘。
  2. 主要逻辑:在 `isKrishnamurthy` 函数中,我们使用 `while` 循环遍历数字的每个位数。对于每个位数,都会确定其阶乘和总和。
  3. 比较:最后,阶乘和与原始数字的比较决定了该数字是否是 Krishnamurthy 数。

复杂度分析

  • 时间复杂度:该算法的时间复杂度为 O(d⋅n),其中 d 是数字的位数,n 是每个数字的因子(对于单个数字的情况,这是常数)。
  • 空间复杂度:该算法的辅助空间使用率为 O(1),因为除了变量之外不需要其他额外空间。

示例 2

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

输出

Enter a number: 145
145 is a Krishnamurthy Number.   

说明

  • 预存储阶乘:`precomputeFactorials` 方法确定 0 到 9 之间数字的阶乘并将它们存储在一个数组中。这有助于消除在其余逻辑中反复计算阶乘的需要。
  • 高效检索:在 O(1) 的时间复杂度内,从数组中提取每个数字对应的因子,以便在大输入中获得更快的解决方案。
  • 减少重复计算:我们不是在 while 循环中每次都查找连续的阶乘值,而是一次性查找,然后对于任何重复数字,我们可以简单地使用预计算的值,这将节省一些时间。

复杂度分析

时间复杂度

  • 预计算:O(10),因为我们只对 0 到 9 的数字执行一次操作。
  • 主要逻辑:O(d),其中 d 代表所提供数字中包含的总位数。
  • 总计:O(d)。

空间复杂度:O(1),因为我们使用大小为 10 的直接访问表。

结论

总之,Krishnamurthy 数是掌握编程基础知识的简单方法,尤其是循环、函数和数字操作等关键领域。所提供的 C++ 解决方案易于理解和使用,尽管它完成了工作。