【问题标题】:How to get digit manipulations in javascript如何在javascript中进行数字操作
【发布时间】:2020-04-23 01:07:33
【问题描述】:

给定一个正整数n,您的任务是计算其数字的乘积与其数字之和之间的差。

注意:顺序很重要;答案应该是product - sum(而不是sum - product)的形式。

示例

  • 对于 n = 123456,输出应为 digitsManipulations(n) = 699.
    • 数字的乘积等于1 * 2 * 3 * 4 * 5 * 6 = 720
    • 数字之和等于1 + 2 + 3 + 4 + 5 + 6 = 21
    • 所以最终答案是720 - 21 = 699
  • 对于n = 1010,输出应为digitsManipulations(n) = -2

    • 数字的乘积等于1 * 0 * 1 * 0 = 0
    • 数字之和等于1 + 0 + 1 + 0 = 2
    • 所以最终答案是0 - 2 = -2

所以我试图让这个函数打印出正确的答案

function digitsManipulations(n) {
    let sum = 0; 
    while (n != 0) 
    { 
        sum = sum + n % 10; 
        n = n/10; 
    } 
    return sum; 
}

我应该采取什么方法?

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: javascript function numbers


【解决方案1】:

先尝试编码。

function solve(num) {
    let sum = 0;
    let product = 1;
    while (num != 0) {
        let digit = num % 10;
        num = Math.floor(num / 10);
        sum += digit;
        product *= digit;
    }
    return product - sum;
}

console.log(solve(123456));
console.log(solve(1010));

【讨论】:

    【解决方案2】:

    考虑到输入是一个数字(不是字符串):

    let input = 123456;
    

    所以我们将它转​​换为一个字符串,允许我们使用String.split() 和空字符串作为分隔符,这样我们就会有一个输出数字的数组:

    input = input.toString().split('');
    // [ '1', '2', '3', '4', '5', '6' ]
    

    现在我们可以使用Array.reduce() 来获取产品和总和:

    const product = input.reduce((acc, current) => current * acc, 1);
    const sum = input.reduce((acc, current) => parseInt(current) + acc, 0);
    

    现在我们只需要减去它们:

    const result = product - sum;
    

    最终的函数如下:

    function digitsManipulations(input) {
        input = input.toString().split('');
        const product = input.reduce((acc, current) => current * acc, 1);
        const sum = input.reduce((acc, current) => parseInt(current) + acc, 0);
    
        return product - sum;
    }
    

    如果您不了解所用函数的行为,则必须按照链接了解。这是基本的编程。

    【讨论】:

      【解决方案3】:

      例如,您可以将数字拆分为单个数字,然后使用数组来获取产品和总和:

      const digitsManipulations = (n) => {
        const numbers = [];
        while (n > 0) {
          numbers.push(n % 10);
          n = Math.floor(n / 10);
        }
        let product = numbers.reduce((p, c) => p * c);
        let sum = numbers.reduce((p, c) => p + c);
        return product - sum;
      };
      
      console.log(digitsManipulations(123456)); // 699
      console.log(digitsManipulations(1010)); // -2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        • 1970-01-01
        • 2013-06-25
        相关资源
        最近更新 更多