Суммирование цифр номера - PullRequest
0 голосов
/ 26 апреля 2020

Мой код ниже. Может кто-нибудь увидеть ошибку, которую я сделал?

Напишите функцию с именем sumDigits, которая принимает число в качестве входного значения и возвращает сумму абсолютного значения каждой из десятичных цифр числа. Например:

sumDigits(10);  // Returns 1
sumDigits(99);  // Returns 18
sumDigits(-32); // Returns 5
Let's assume that all numbers in the input will be integer values.

function sumDigits(number) {
  let numberstring = number.toString()
  let numberarr = numberstring.split("")
  let counter = 0
  for(var i=0; i<numberarr.length; i++) {
    if(typeof numberarr[i] === "number") {
        console.log(numberarr[i])
        let numbervalue = Number(numberarr[i])
        console.log(numbervalue)  
        counter += numbervalue
    } else if (typeof numberarr[i] !== "number"){
      counter += 0
    }
  } 
  return counter
}

Ответы [ 6 ]

1 голос
/ 26 апреля 2020
console.log(Math.abs(sumDigits(10)));  // Returns 1
console.log(Math.abs(sumDigits(99)));  // Returns 1
console.log(Math.abs(sumDigits(-32)));  // Returns 1 // Returns 5
//Let's assume that all numbers in the input will be integer values.

function sumDigits(number) {
  var counter = 0;
    var remainder;
    number=Math.abs(number);
        while(number>0){
            counter=counter+number%10;
            number=Math.floor(number/10);
        }
        return counter;
  } 

Я думаю, вы ищете какой-то код, подобный этому. я не понимаю, почему вы конвертируете свой номер в строку.

number=Math.abs(number); this line first convert any negative number to positive.

sumDigits(number) takes an argument as now loop through the number until number < 0 then add the remainder to counter variable then return counter as final sum
0 голосов
/ 26 апреля 2020

Использование фильтра и сокращения для расчета суммы.

function sumDigits(number) {
  return ( [...number.toString()]
    .filter( (char) => !isNaN(parseInt( char ) ) )
    .reduce( function(a,b) { return a + parseInt(b) }, 0) );
}
const sum1 = sumDigits(103);
console.log( sum1 );
const sum2 = sumDigits(-105);
console.log( sum2 );
0 голосов
/ 26 апреля 2020

Ответ giovybus & Raman правильный, если вам интересно, почему ваш фрагмент не работает - это потому, что ссылка на номер [I] всегда будет строкой. numberarr - это строковый массив, а не числовой массив, вам необходимо преобразовать его в число перед использованием. Корректировки вашего кода выше, как показано ниже

sumDigits(10);  // Returns 1
sumDigits(99);  // Returns 18
sumDigits(-32);

function sumDigits(number) {
  let numberstring = number.toString().replace("-", "");
  let numberarr = numberstring.split("")
  let counter = 0
   
  for(var i=0; i<numberarr.length; i++) {
    const numbervalue = Number(numberarr[i])
    if(typeof numbervalue === "number") {
        counter += numbervalue
    } else if (typeof numbervalue !== "number"){
      counter += 0
    }
  } 
  console.log(counter)
  return counter
}

Однако это не очень хорошее решение, и вам следует подумать об использовании решения от giovybus, Raman или кого-либо еще с лучшим подходом.

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

Это

if (typeof numberarr [i] === "число")

всегда ложно, потому что перед преобразованием числа в строку , Я думаю, что ваша функция всегда возвращает ноль.

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

Попробуйте это решение:

console.log(sumDigits(-103));  // Returns 4

function sumDigits(number) {
    var numberstring = number.toString();

    var counter=0;
    for(var i=0; i<numberstring.length; i++){
        if(parseInt(numberstring.charAt(i))){
            counter += parseInt(numberstring.charAt(i));
        }
    }
    return counter;
}
0 голосов
/ 26 апреля 2020

Вы должны проанализировать каждую ди git перед ее добавлением. Для этого пользователь parseInt () вместо Number (). Вот что делает номер https://www.w3schools.com/jsref/jsref_number.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...