Как получить ди git манипуляций в javascript - PullRequest
0 голосов
/ 23 апреля 2020

Если задано положительное целое число n, ваша задача - вычислить разницу между произведением его цифр и суммой его цифр.

Примечание: порядок имеет значение; ответ должен иметь форму product - sum (а не sum - product).

Пример

  • Для n = 123456 вывод должен be digitsManipulations(n) = 699.
    • Произведение цифр равно 1 * 2 * 3 * 4 * 5 * 6 = 720.
    • Сумма цифр равна 1 + 2 + 3 + 4 + 5 + 6 = 21.
    • Итак, окончательный ответ is 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; 
}

Какой подход мне выбрать?

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Попробуйте сначала написать код.

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));
1 голос
/ 23 апреля 2020

Учитывая, что вход является числом (не строкой):

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;
}

Если вы не понимаете поведение используемых функций, Вы должны перейти по ссылкам и понять. Это основа c программирования.

0 голосов
/ 23 апреля 2020

Например, вы можете разбить число на однозначные числа, а затем поработать с массивом, чтобы получить произведение и сумму:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...