You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS乘法持久性函数问题:输入39返回值不符合预期

乘法持久性函数修正方案

你的代码逻辑存在顺序问题,导致最后一次关键的乘法操作未被计数。以输入39为例,当处理到['1','4']时,你的代码会先判断multiply后的结果'4'是一位数,直接跳出循环,而没有把这次1*4=4的操作计入计数器,所以返回2而不是正确的3。

问题代码的核心问题

循环中你先检查乘法结果是否为一位数,若为真则直接终止循环,跳过了最后一次操作的计数。正确的逻辑应该是:只要当前数字不是一位数,就执行乘法操作并计数,直到数字变为一位数为止。

修正后的代码

function persistence(num) {
  let numStr = num.toString();
  let counter = 0;
  const multiply = (str) => {
    let product = 1;
    for (const char of str) {
      product *= parseInt(char, 10);
    }
    return product.toString();
  };

  // 当数字的字符串长度大于1时,持续执行乘法操作
  while (numStr.length > 1) {
    numStr = multiply(numStr);
    counter++;
  }

  return counter;
}

关键改进点

  1. 调整循环逻辑:以当前数字的字符串长度是否大于1作为循环条件,确保每次非一位数的数字都会被处理并计数。
  2. 简化数组操作:直接使用字符串处理,避免频繁的split和toString转换,更高效。
  3. 给parseInt添加基数参数10,避免潜在的进制解析问题。

测试输入39时,执行流程如下:

  • 初始numStr = '39',长度>1 → 计算3*9=27,counter=1
  • numStr = '27',长度>1 → 计算2*7=14,counter=2
  • numStr = '14',长度>1 → 计算1*4=4,counter=3
  • numStr = '4',长度=1 → 循环终止,返回3

内容的提问来源于stack exchange,提问作者N. Hughes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:13:19