JavaScript 实现卡普雷卡尔常数(黑洞数)运算步骤查找

认真发呆
认真发呆
发布时间:2026-10-13 | 4人浏览过
原创

利用 JavaScript 递归函数计算任意四位数达到黑洞数 6174 所需的步骤,展示数值分解、排序重组及差值计算的完整算法实现。

原理与目标

卡普雷卡尔黑洞数(Kaprekar's constant)为 6174。对于任意一个各位数字不全相同的四位数,将其数字从大到小排列减去从小到大排列的结果,经过有限次重复运算后,最终必得到 6174。本例旨在通过编程找出特定数字到达该常数的具体运算路线与次数。

第1步:准备环境与数据结构

定义全局常量 BLACKHOLENMB 存储目标值 6174,以及计数器 count 用于记录运算轮数。将代码封装在 HTML 页面中以便于直接在浏览器控制台查看结果。

第2步:构建递归核心逻辑

编写 blackHole(nmb) 函数,执行以下操作:

  1. 输入校验:检查传入参数是否为有效数字且在 1000-9999 范围内,若不符合则返回 -1。
  2. 数字拆分与重组:将数字转为字符串,拆分为数组后分别排序生成最小数 smallNmb,反向排序生成最大数 bigNmb。
  3. 计算差值:执行 bigNmb - smallNmb 获取新数值。
  4. 递归判断:若差值不等于 6174,则递归调用自身;若相等,则返回当前计数。

代码实现

以下是完整的 JavaScript 实现代码,可直接保存为 .html 文件运行。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>黑洞数运算路线查找</title>
</head>
<body>
  <script type="text/javascript">
    var BLACKHOLENMB = 6174;
    var count = 0;
    
    function blackHole(nmb) {
      if (isNaN(nmb) || nmb < 1000 || nmb > 9999) {
        return -1;
      }
      count++;
      
      var tempArray = (nmb + "").split("");
      // 正序排列得到最小数
      var smallNmb = parseInt(tempArray.sort().join(""));
      // 逆序排列得到最大数
      var bigNmb = parseInt(tempArray.reverse().join(""));
      
      var d_value = bigNmb - smallNmb;
      log(bigNmb, smallNmb, d_value, count);
      
      if (d_value != BLACKHOLENMB) {
        return blackHole(d_value); // 递归调用
      } else {
        return count; // 达成黑洞数,返回步骤
      }
    }
    
    function log(big, small, d_value, count) {
      console.log("step " + count + ":" + big + "-" + small + "=" + d_value);
    }
    
    // 测试入口:以 2167 为例
    console.log("Total Steps: " + blackHole(2167));
  </script>
</body>
</html>

运行结果与分析

以输入数字 2167 为例,打开浏览器开发者工具(Console),可见类似以下的日志输出:

  • Step 1: 7652 - 2567 = 5085
  • Step 2: 8550 - 0558 = 7992
  • Step 3: 9972 - 2799 = 7173
  • Step 4: 7731 - 1377 = 6354
  • Step 5: 6543 - 3456 = 3087
  • Step 6: 8730 - 0378 = 8352
  • Step 7: 8532 - 2358 = 6174

控制台最终输出 Total Steps: 7,表示 2167 经过 7 次运算到达黑洞数 6174。

注意事项

  • 数字要求:输入的整数必须在 1000 到 9999 之间,且不能是像 1111、2222 这样各位全部相同的数字,否则差值恒为 0,无法进入黑洞循环。
  • 性能考虑:由于最大运算步数极少(通常不超过 7 步),递归深度很浅,不存在栈溢出风险。

以上就是 JavaScript 黑洞数字之运算路线查找算法(递归算法)实例的详细内容,更多关于 JS递归计算卡普雷卡尔常数的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表