求和数字Javascript的所有数字

Hod*_*dru 9 javascript numbers sum digits

我是新手.

我想制作一个小应用程序,它将计算一个数字的所有数字的总和.

例如,如果我的数字是2568,则应用程序将计算2 + 5 + 6 + 8,其等于21.最后,它将计算21位数的总和,最终结果将为3.

请帮我

Fed*_*cci 28

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

function sumDigits(n) {
  return (n - 1) % 9 + 1;
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:它以*递归*的方式找到数字的总和(从问题的标题和接受的答案中不清楚) (3认同)
  • @ R3l1c函数应递归返回rhe sum,这正是问题所在,请再次阅读。该解决方案非常适合该问题 (3认同)
  • 实际上是“ 11%9 = 2”,而不是1,所以“ 1 + 2 = 3” (2认同)
  • @AlexShevyakov忽略-1和+1,则仅为n%9。由于数n = 10 ^ k * a_k + 10 ^(k-1)* a_(k-1)... 10 ^ 0 * a_0。模9删除所有10 ^ i,因为10 ^ i mod 9 =1。然后也以模9求和。当您想象-1将整数线向左移动一时,您也会正确地得到9。之后,您只需再次添加1。 (2认同)
  • @FedericoAntonucci 显然,对于所有大于 10 且除以 9 余数为 1 的数字都会失败。例如。19、28、37、46……等等。对于这些情况,该函数应返回 10,但实际上返回 1。 (2认同)
  • 例如 sumDigits(19) 返回 1 而不是 2 (2认同)

Nin*_*olz 19

基本上你有两种方法来获得整数的所有部分的总和.

  • 用数值运算

    取数字并构建剩下的10并添加.然后将数字除法的整数部分乘以10.继续.

var value = 2568,
    sum = 0;

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

console.log(sum);
Run Code Online (Sandbox Code Playgroud)

  • 使用字符串操作

    将数字转换为字符串,拆分字符串并获取包含所有数字的数组,并为每个部分执行reduce并返回总和.

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

console.log(sum);
Run Code Online (Sandbox Code Playgroud)


要返回值,您需要添加value属性.

rezultat.value = sum;
//      ^^^^^^
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)
<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"/>
Run Code Online (Sandbox Code Playgroud)


Wes*_*yAC 5

\n

用数学公式:

\n
\n
function sumDigits(n) { \n    return (--n % 9) + 1;\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

没有数学公式:

\n
\n
function sumDigits(n) {\n    if (typeof n !== 'string') {\n        n = n.toString();\n    }    \n    if (n.length < 2) {\n        return parseInt(n);\n    }\n\xe2\x80\x8b\n    return sumDigits(\n        n.split('')\n         .reduce((acc, num) => acc += parseInt(num), 0)\n    );\n}\n
Run Code Online (Sandbox Code Playgroud)\n