【问题标题】:How to make single digits?如何制作个位数?
【发布时间】:2021-04-10 04:27:08
【问题描述】:
function SingleDigits(num) {

function makeDigits(num) {
    let value = 1 
    let arr = String(num) 
    for(let i = 0 ; i < arr.length; i++){
      value = value * Number(arr[i]) 
    }
      return value;
}
value += "";
while(1>=value.length){
  let result = 1;
  result = result 
}

我会一直这样做,直到我达到一个数字为止..

num = 786

7 * 8 * 6 -> 336
3 * 3 * 6 -> 54
5 * 4 -> 20
2 * 0 -> 0

像那样..我该如何设置?或者,我的方向是对的?

【问题讨论】:

  • “我的方向是对的吗?” - 那将是“不”,因为您的脚本不起作用。查看How do I ask a good question?,然后添加minimal reproducible example,解释您的代码存在的问题(最好使用示例输入和输出)并添加您在控制台中看到的任何错误消息。

标签: javascript while-loop


【解决方案1】:

我不知道为什么你必须在这里使用字符串。您可以执行以下操作,

function SingleDigits(num) {
   
    if(num <= 9) {
      return num;
    }
    let res = 1;
    while(num) {
      res = res * (num % 10);
      num = parseInt(num / 10);
    }
    
    if(res <= 9) {
      return res;
    }
  return SingleDigits(res);
}

console.log(SingleDigits(786));

【讨论】:

  • 实际上,字符串可以计算“长度”,所以我是这样想的..你的代码很有趣..没有num的长度..
【解决方案2】:

你应该使用递归策略。

function SingleDigits(num) {
  if (parseInt(num / 10) > 0) {
    let t = 1;
    while (num > 0) {
      t *= num % 10;
      num = parseInt(num / 10);
    }
    console.log(t);
    SingleDigits(t);

  }
}
SingleDigits(786);

【讨论】:

  • 是的!我会!我同意
【解决方案3】:

使用递归。该函数可以非常简单,使用 reducer 来计算产品。

const singleDigit = num => {
  const nums = [...`${num}`];
  const product = nums.reduce( (acc, val) => acc * +val, 1);
  console.log(`${nums.join(" * ")} -> ${product}`);
  return product <= 9 ? product : singleDigit(product);
}

console.log(singleDigit(4328));

【讨论】:

  • 哦减速机..这是一个有趣的解决方案!非常感谢!
【解决方案4】:

你可以使用递归继续下去,直到总数等于 0。

例如。

function digits(num) {
  const nums = num.toString().
    split('').map(Number);
  const total = nums.reduce(
    (a,v) => a * v);
  console.log(
    nums.join(' * ') + 
    " => " + total);
  if (total > 9)
    digits(total);
}


digits(786);

【讨论】:

  • 函数的最终结果不一定是0。它可以是任何一位数。这意味着只要乘法结果小于 10,我们就应该返回该结果。
  • @sabbir.alam 好点,改变了条件。
  • @Keith Ohhh 我没想到递归哈哈;;感谢您的青睐。你给了我一个想法,我会学习:)
猜你喜欢
  • 2023-03-20
  • 2017-01-01
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多