【问题标题】:Implement a single iteration in Javascript在 Javascript 中实现单次迭代
【发布时间】:2021-09-20 12:46:57
【问题描述】:

所以我进入了这个在线测试问题,类似这样的:

编写一个函数来检查给定的值是否为单个数字。如果不是,则将所有数字相加,直到变成一个数字。例如,给定的值为 55555,结果为 25。当 2 和 5 相加时,将得到 7。

这是我的答案:

function createCheckDigit(membershipId) {
  let sum = 0;
  let array = membershipId.toString().split("")
  if(array.length > 1){
    for(let i = 0; i < array.length; i++){
      sum = sum + parseInt(array[i]);
    }
  }
  if(sum.toString().split("").length > 1){
    return createCheckDigit(sum.toString())
  } else {
    return sum
  }
}

console.log(createCheckDigit("55555"));

这个问题的目标是:

  1. 测试用例答案 = 7 (完成)
  2. 需要单次迭代(必需)
  3. 需要两次迭代(完成)
  4. 需要多次迭代(完成)

我设法完成了 1、3、4,但没有完成 2。我不明白单次迭代应该发生在哪个部分?

【问题讨论】:

  • 我认为这意味着对于像12 这样的值,您只需调用一次函数就知道结果(3),并且不需要进一步的递归。
  • 2中传入的值是什么?
  • 不会改变任何东西,但由于类型强制(由&gt; 运算符触发)if(sum.toString().split("").length &gt; 1) 可以是if(sum &gt; 10)
  • @Pointy 你是天才!这正是它的意思。刚刚通过返回 membersId 为第一个数组长度检查添加了 else 条件,它就完成了。 :)

标签: javascript iteration


【解决方案1】:

我想我已经找到了解决问题的方法:

function checkDigit(v) {
    let sum = 0;
    const digits = v.toString().split("");
    for (let i = 0; i < digits.length; ++i) {
        sum += Number(digits[i]);
        if (sum >= 10) {
            sum -= 9; // same as (sum - 10) + 1; this works because we won't ever get a sum greater than 9+9=18 so the sum of those digits will be a single digit
        }
    }
    
    return sum;
}

console.log(checkDigit('55555'));
console.log(checkDigit('2'));
console.log(checkDigit('12345'));
console.log(checkDigit('99999'));
console.log(checkDigit('775542'));

【讨论】:

    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多