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

Я видел кучу других сообщений по этой теме, но ни одного в 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 ответов


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

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

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

  1236 - 6
= 1230

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

  1230 / 10
= 123

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

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

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

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


Я использую его :)

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

без функции eval

var result = '123456'.split('').reduce(function(a,b){ return +a+ +b; });
alert(result); // 21

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

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

Update (синтаксис ES6):

[...'123456'].map(e=>parseInt(e)).reduce((a,b)=>a+b); //21

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

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

while (expression) {
     statement(s)
}

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

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