我在这个主题上看到了很多其他帖子,但在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语句。任何帮助将不胜感激。谢谢!
答案 0 :(得分:14)
第二个函数使用模运算符来提取最后一个数字:
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;
}
它确实是你要做的事情,它迭代数字的数字(通过将其转换为字符串)。
答案 1 :(得分:7)
我用它:)
var result = eval('123456'.replace(/(\d)(?=\d)/g, '$1+'));
alert(result); // 21
&#13;
没有评估
var result = '123456'.split('').reduce(function(a,b){ return +a+ +b; });
alert(result); // 21
&#13;
答案 2 :(得分:3)
我用这个:
'123456'.split('').map(function(e){return parseInt(e)}).reduce(function(a,b){return a+b}); //21
[...'123456'].map(e=>parseInt(e)).reduce((a,b)=>a+b); //21
答案 3 :(得分:0)
不确定你的意思,如果你问的是while while循环..
当特定条件为真时,while语句会不断执行一个语句块。其语法可表示为:
while (expression) {
statement(s)
}
while语句计算表达式,该表达式必须返回一个布尔值。如果表达式的计算结果为true,则while语句将执行while块中的语句。 while语句继续测试表达式并执行其块,直到表达式求值为false。
这里的while循环是从实际数字中逐个提取数字并添加它们。尝试手动完成每一步,你就可以得到它。