Sum all the digits of a number Javascript

后端 未结 4 2071
囚心锁ツ
囚心锁ツ 2020-11-27 06:21

I am newbie.

I want to make small app which will calculate the sum of all the digits of a number.

For example, if I have the number 2568, the app will calcul

相关标签:
4条回答
  • 2020-11-27 06:27

    The sum of digits can be calculated using that function (based on other answers):

    function sumDigits(n) {
        let sum = 0;
        while (n) {
            digit = n % 10;
            sum += digit;
            n = (n - digit) / 10;
        }
        return sum;
    }
    

    If you really need to sum the digits recursively there is recursive version of the function:

    function sumDigitsRecursively(n) {
        let sum = sumDigits(n);
        if (sum < 10)
            return sum;
        else
            return sumDigitsRecursively(sum);
    }
    

    The sumDigitsRecursively(2568) expression will be equal to 3. Because 2+5+6+8 = 21 and 2+1 = 3.

    Note that recursive solution by @FedericoAntonucci should be more efficient, but it does not give you intermediate sum of digits if you need it.

    0 讨论(0)
  • 2020-11-27 06:33

    How about this simple approach using modulo 9 arithmetic?

    function sumDigits(n) {
      return (n - 1) % 9 + 1;
    }
    
    0 讨论(0)
  • 2020-11-27 06:36

    Basically you have two methods to get the sum of all parts of an integer number.

    • With numerical operations

      Take the number and build the remainder of ten and add that. Then take the integer part of the division of the number by 10. Proceed.

    var value = 2568,
        sum = 0;
    
    while (value) {
        sum += value % 10;
        value = Math.floor(value / 10);
    }
    
    console.log(sum);

    • Use string operations

      Convert the number to string, split the string and get an array with all digits and perform a reduce for every part and return the sum.

    var value = 2568,
        sum = value
            .toString()
            .split('')
            .map(Number)
            .reduce(function (a, b) {
                return a + b;
            }, 0);
    
    console.log(sum);


    For returning the value, you need to addres the value property.

    rezultat.value = sum;
    //      ^^^^^^
    

    function sumDigits() {
        var value = document.getElementById("thenumber").value,
            sum = 0;
    
      while (value) {
          sum += value % 10;
          value = Math.floor(value / 10);
      }
      
      var rezultat = document.getElementById("result");
      rezultat.value = sum;
    }
    <input type="text" placeholder="number" id="thenumber"/><br/><br/>
    <button onclick="sumDigits()">Calculate</button><br/><br/>
    <input type="text" readonly="true" placeholder="the result" id="result"/>

    0 讨论(0)
  • 2020-11-27 06:47

    let's try recursivity

    function sumDigits(n) {
      if (n < 10) return n
      return sumDigits(n % 10 + sumDigits(Math.floor(n / 10)))
    }
    
    sumDigits(2) // 2
    sumDigits(2568) // 3
    
    0 讨论(0)
提交回复
热议问题