对一个数的所有数字求和 Javascript

Sum all the digits of a number Javascript

我是新手

我想制作一个小应用程序来计算一个数字的所有数字的总和。

比如我有2568这个数,app会计算2+5+6+8等于21,最后会计算21位数字的和,最后的结果就是3。

请帮帮我

基本上,您有两种方法可以获取整数所有部分的总和。

  • 有数值运算

    取数字并计算 10 的余数并相加。然后取数除以10的整数部分,继续。

var value = 2568,
    sum = 0;

while (value) {
    sum += value % 10;
    value = Math.floor(value / 10);
}

console.log(sum);

  • 使用字符串操作

    将数字转换为字符串,拆分字符串并获得包含所有数字的数组,并对每个部分执行归约,return 求和。

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

console.log(sum);


对于 return 值,您需要添加 value 属性。

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"/>

这种使用模 9 算法的简单方法怎么样?

function sumDigits(n) {
  return (n - 1) % 9 + 1;
}

可以使用该函数计算数字总和(基于其他答案):

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

如果您确实需要递归地对数字求和,可以使用该函数的递归版本:

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

sumDigitsRecursively(2568) 表达式将等于 3。因为 2+5+6+8 = 212+1 = 3.

请注意,@FedericoAntonucci 的 应该更有效,但如果您需要,它不会为您提供中间数字和。

让我们试试递归

function sumDigits(n) {
  if (n < 10) return n
  return sumDigits(n % 10 + sumDigits(Math.floor(n / 10)))
}

sumDigits(2) // 2
sumDigits(2568) // 3

With mathy formula:

function sumDigits(n) { 
    return (--n % 9) + 1;
}

Without mathy formula:

function sumDigits(n) {
    if (typeof n !== 'string') {
        n = n.toString();
    }    
    if (n.length < 2) {
        return parseInt(n);
    }
​
    return sumDigits(
        n.split('')
         .reduce((acc, num) => acc += parseInt(num), 0)
    );
}

扩展 @fethe 的回答,这个 sumOfDigit 函数能够处理大数或 BigInt

function sumOfDigits(n) { 
  return (Number.isSafeInteger(n)) ? (--n % 9) + 1 : Number((--n % 9n) + 1n);
}

console.log(sumOfDigits(101)); // 2
console.log(sumOfDigits(84932)); // 8
console.log(sumOfDigits(900000000000000000000000009n)); // 9

你可以这样做。

function sums(input) {
    let numArr = input.toString().split('');
    let sum = numArr.reduce((a, b) => Number(a) + Number(b));
    return sum < 10 ? sum : sums(sum);
}