繁体   English   中英

数字javascript的数字之和

[英]sum of the digits of a number 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));

我得到了正确的答案,我只是不完全理解第二个函数,即while语句。 任何帮助将不胜感激。 谢谢!

第二个函数使用模运算符来提取最后一个数字:

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

它确实是你要做的事情,它迭代数字的数字(通过将其转换为字符串)。

我用它 :)

 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 

我用这个:

'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

不确定你的意思,如果你问的是while循环..

while语句在特定条件为真时继续执行语句块。 其语法可表示为:

while (expression) {
     statement(s)
}

while语句计算表达式,该表达式必须返回一个布尔值。 如果表达式的计算结果为true,则while语句将执行while块中的语句。 while语句继续测试表达式并执行其块,直到表达式求值为false。

这里的while循环是从实际数字中逐个提取数字并添加它们。 尝试手动完成每一步,你就会得到它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM