Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用while循环将整数拆分为数字,然后将数字相乘_Javascript_Parsing_While Loop_Split - Fatal编程技术网

Javascript 使用while循环将整数拆分为数字,然后将数字相乘

Javascript 使用while循环将整数拆分为数字,然后将数字相乘,javascript,parsing,while-loop,split,Javascript,Parsing,While Loop,Split,尝试一个codewars(持久性错误),你必须取一个整数并将数字相乘,直到结果小于10(答案是小于10所需的次数) 例如39==3,因为: 3*9=27 2*7=14 1*4=4 我的逻辑是使用while循环,因此当multipleednum>10时,将整数拆分为单个数字,将数字相乘(每次将计数增加1),然后如果结果小于10,则返回计数 我的问题是,我不确定这段代码哪里出了问题,它没有返回任何信息: function persistence(num) { let multipliedNum

尝试一个codewars(持久性错误),你必须取一个整数并将数字相乘,直到结果小于10(答案是小于10所需的次数)

例如39==3,因为:

  • 3*9=27
  • 2*7=14
  • 1*4=4
  • 我的逻辑是使用while循环,因此当multipleednum>10时,将整数拆分为单个数字,将数字相乘(每次将计数增加1),然后如果结果小于10,则返回计数

    我的问题是,我不确定这段代码哪里出了问题,它没有返回任何信息:

    function persistence(num) {
      let multipliedNum = num;
      let count = 0;
    
      while (multipliedNum > 10) {
        multipliedNum = (num + '').split('').reduce((previousValue, currentValue) =>
          parseInt(previousValue, 10) * parseInt(currentValue, 10));
        count += 1;
      }
    
      if (multipliedNum < 10) {
        return count;
      }
    }
    
    persistence(39);
    
    函数持久性(num){
    让multiplednum=num;
    让计数=0;
    而(倍数大于10){
    multipleednum=(num+'').split('').reduce((previousValue,currentValue)=>
    parseInt(前一个值,10)*parseInt(当前值,10));
    计数+=1;
    }
    如果(倍数<10){
    返回计数;
    }
    }
    持久性(39);
    
    任何关于我错在哪里的线索都很好!(这里有点像JS初学者)


    您正在将结果分配给
    multipleednum
    ,但首先使用
    num
    ,这意味着它会不断地拆分相同的
    num
    。将
    num
    更改为
    multipleednum

    该代码的主要问题是,由于以下情况,它卡在无限循环中:

    while(multipliedNum > 10)
    
    因为您一直使用夹板
    num
    并将其指定给multiliednum,因此multiliednum始终大于10

    请尝试以下操作:

    函数持久性(num){
    让multiplednum=num;
    让计数=0;
    而(倍数大于10){
    multipleednum=(multipleednum+'').split('').reduce((先前的值,当前值)=>
    parseInt(前一个值,10)*parseInt(当前值,10));
    计数+=1;
    }
    如果(倍数<10){
    返回计数;
    }
    }
    
    console.log(持久性(39))您需要对while循环进行不同的检查,因为您需要在乘法中包含
    10

    然后,您需要相同的变量来减少和分配。你可以用
    num
    来计算。如果为了相同的目的循环使用相同的变量,则不会造成任何伤害

    然后对reduce进行简化回调,
    parseInt
    是不必要的,因为通过使用乘法操作数
    *
    将隐式类型转换为数字。此运算符需要数字,并尝试将操作数强制转换为数字

    在结束时,只需返回计数-无需检查,这永远不会是
    false

    函数持久性(num){
    var计数=0;
    while(num>9){
    num=num.toString().split(“”).reduce((a,b)=>a*b);
    计数++;
    }
    返回计数;
    }
    
    console.log(持久性(39))@daggett,如果您喜欢使用递归,那么下面的代码也可以解决您的问题,但我不建议您使用此代码

    我刚才介绍了使用递归来解决您的问题,这是一个在大型应用程序中用于简化任务的伟大概念

    输入39336

    3 * 9 = 27
    2 * 7 = 14
    1 * 4 = 4
    ============
    3 times
    
    
    7 * 8 * 6 = 336
    3 * 3 * 6 = 54
    5 * 4 = 20
    2 * 0 = 0
    ============
    4 times
    
    代码

    函数timeToGetNumbers小于10(num){
    变量s=''+num
    var chars=[]
    如果(s.length==1)
    返回1
    总和=1
    对于(变量i=0;i*/
    既然最终结果是4,为什么39==3?大卫托马斯(DavidThomas)说,即使是
    multipleednum
    10
    ,也会发生什么呢?因为它计算的是达到4的次数,而不是最终结果hh;编辑的目的是(尝试)并明确这是步骤的数量,而不是最终结果。如果我没有帮助,请随时回滚。不要修复问题中的代码。它使答案无效。@JohnKugelman代码没有修复-仍然不起作用,只是更新了一个error@daggett它返回3。
    3 * 9 = 27
    2 * 7 = 14
    1 * 4 = 4
    ============
    3 times
    
    
    7 * 8 * 6 = 336
    3 * 3 * 6 = 54
    5 * 4 = 20
    2 * 0 = 0
    ============
    4 times