【问题标题】:Multiplying individual digits in a number with each other in JavaScript在JavaScript中将数字中的各个数字相乘
【发布时间】:2018-04-09 17:46:59
【问题描述】:

我正在尝试制作一个程序,它将获取数字中的数字并将它们相乘。所以583 将是5*8*3 = 120

它没有按预期工作,它只是返回了放入的number

我该如何解决?

代码如下:

function persistence(num) {
  //code me
  numString = num.toString();
  numArray = numString.split().map(function(t) {
    return parseInt(t)
  });


  function reducer(theNumArray) {
    let sum = 1;
    for (var i = 0; i < theNumArray.length; i++) {
      sum = sum * theNumArray[i];

    }
    return sum;
  }
  newNum = reducer(numArray);

  console.log(newNum);
};

persistence(485);

【问题讨论】:

标签: javascript arrays function


【解决方案1】:

您可以将字符串拆分为空字符串,以获得单个数字。然后,如果需要,将所有字符串转换为一个数字。

function reducer(theNumArray) {
    var i, sum = 1;
    for (i = 0; i < theNumArray.length; i++) {
        sum *= theNumArray[i];
    }
    return sum;
}

function persistence(num) {
    var numArray = num.toString().split('').map(Number);
    return reducer(numArray);
}

console.log(persistence(485));

更短的方法可能是通过使用带有迭代器的扩展语法来获取单个数字,然后将值相乘并返回结果。

function persistence(number) {
    return [...number.toString()].reduce((p, v) => p * v);
}

console.log(persistence(485));

【讨论】:

  • 真正干净的解决方案。
【解决方案2】:

你只需要在split('')里面改一下

演示

function persistence(num) {
  //code me
  numString = num.toString();
  numArray = numString.split('').map(function(t) {
    return parseInt(t)
  });

  function reducer(theNumArray) {
    let sum = 1;
    for (var i = 0; i < theNumArray.length; i++) {
      sum = sum * theNumArray[i];

    }
    return sum;
  }
  newNum = reducer(numArray);

  console.log(newNum);
};

persistence(485);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您也可以使用reduce 方法进行数组。

ES5

function persistence(num) {
  let result = num.toString().split('').reduce(function(total, v) {
    return total * v
  }, 1);
  console.log(result);
};

persistence(485);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6

使用 ES6 的 Spread_syntax 可以更轻松。

function persistence(num) {
  let result = [...num.toString()].reduce((total, v) => total * v, 1);
  console.log(result);
};

persistence(485);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案3】:

    您不需要拆分字符串,只需按字符编号引用字符即可。这似乎适用于 4*8*5= 160 的示例。

    另一种方式(在 ECMAScript 5 中引入)是将字符串视为 一个类似数组的对象,其中单个字符对应于 数值索引

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

    function persistence(num) {
      numString = num.toString();
      let sum = 1;
      for (var i = 0; i < numString.length; i++) {
        sum = sum * numString[i];
      }
      console.log(sum);
    };
    persistence(485);

    【讨论】:

      【解决方案4】:

      根据this,拆分方法会根据输入产生不同的结果(很明显吧?):

      No Separator-> 如果没有将分隔符参数传递给 split 方法,则生成的数组将具有由整个字符串组成的单个元素

      所以,基本上从这里开始:

      numString.split()

      你会得到一个包含字符串(你的号码)的数组,这应该改为:

      numString.split('')

      所以你的整个代码应该是这样的:

       function persistence(num) {
          numString = num.toString();
          numArray = numString.split().map(function(t) {
             return parseInt(t)
          });
      
      
       function reducer(theNumArray) {
           let sum = 1;
           for (var i = 0; i < theNumArray.length; i++) {
               sum = sum * theNumArray[i];
           }
           return sum;
       }
       newNum = reducer(numArray);
      
       console.log(newNum);
      };
      
      persistence(485);
      

      【讨论】:

        【解决方案5】:

        假设 num 是一个正整数:

            function persistence(num) {
            var ans=1;    
            while( num!==0){
                    ans=ans*(num-Math.floor(num/10)*10);
                    num=Math.floor(num/10);
        
                }
                console.log(ans);
            }
        
            persistence(123);
        

        这是基于 (num-Math.floor(num/10)*10) 提取最低有效数字。例如

        123 - Math.floor(123/10)*10

        123 - 12*10

        123 - 120

        3

        在将 num 减一位后除以 10 以此类推。 你不需要字符串。

        【讨论】:

        • num-Math.floor(num/10)*10 可能只是 num % 10
        猜你喜欢
        • 1970-01-01
        • 2019-07-02
        • 2010-12-24
        • 1970-01-01
        • 2019-10-10
        • 2013-12-19
        • 2016-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多