сумма цифр числа javascript - PullRequest
       1

сумма цифр числа javascript

10 голосов
/ 04 февраля 2012

Я видел кучу других постов на эту тему, но ни одного в javascript.вот мой код.

var theNumber = function digitAdd (base, exponent) {
    var number = 1;
    for (i=0; i < exponent; i++) {
        var number = base * number;
    }
    return number
}


function find(theNumber) {
 var sum=0;
    parseInt(theNumber);
    while(theNumber>0)
     {
       sum=sum+theNumber%10;
       theNumber=Math.floor(theNumber/10);
      }
    document.writeln("Sum of digits  "+sum);
   }

find(theNumber (2, 50));

Я получаю правильный ответ, я просто не совсем понимаю 2-ю функцию, а именно оператор while.Любая помощь будет принята с благодарностью.Спасибо!

Ответы [ 4 ]

14 голосов
/ 04 февраля 2012

Вторая функция использует оператор по модулю для извлечения последней цифры:

  1236 % 10
= 1236 - 10 * floor(1236 / 10)
= 1236 - 1230
= 6

Когда извлекается последняя цифра, она вычитается из числа:

  1236 - 6
= 1230

Ичисло делится на 10:

  1230 / 10
= 123

Каждый раз, когда этот цикл повторяется, последняя цифра обрезается и добавляется к сумме.

Оператор по модулю возвращает одну цифру, еслилевая сторона меньше, чем правая (что произойдет для любого 1-значного числа), то есть, когда цикл прерывается:

  1 % 10
= 1

Вот как начальная цифра прибавляется к итогу.


Менее числовая альтернатива была бы такой:

function sumDigits(number) {
  var str = number.toString();
  var sum = 0;

  for (var i = 0; i < str.length; i++) {
    sum += parseInt(str.charAt(i), 10);
  }

  return sum;
}

Она буквально выполняет то, что вы пытаетесь сделать, итерацию по цифрам числа (путем преобразования его в строку).

7 голосов
/ 18 июня 2014

Я использую это:)

var result = eval('123456'.replace(/(\d)(?=\d)/g, '$1+'));
alert(result); // 21

без оценки

var result = '123456'.split('').reduce(function(a,b){ return +a+ +b; });
alert(result); // 21
3 голосов
/ 01 января 2016

Я использую это:

'123456'.split('').map(function(e){return parseInt(e)}).reduce(function(a,b){return a+b}); //21

Обновление (синтаксис ES6):

[...'123456'].map(e=>parseInt(e)).reduce((a,b)=>a+b); //21
0 голосов
/ 04 февраля 2012

Не уверен, что вы имели в виду, если вы спрашивали о цикле while.

Оператор while непрерывно выполняет блок операторов, пока определенное условие выполняется.Его синтаксис может быть выражен как:

while (expression) {
     statement(s)
}

Оператор while вычисляет выражение, которое должно возвращать логическое значение.Если выражение принимает значение true, оператор while выполняет оператор (ы) в блоке while.Оператор while продолжает тестировать выражение и выполнять его блок до тех пор, пока выражение не станет ложным.

Цикл while здесь извлекает цифры одну за другой из действительного числа и добавляет их.Попробуйте выполнить каждый шаг вручную, и вы получите его.

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