我是新手。
我想做一个小应用程序来计算一个数字的所有数字的总和。
例如,如果我有数字 2568,应用程序将计算 2+5+6+8 等于 21。最后,它会计算 21 的数字之和,最终结果将为 3 。
请帮我
我是新手。
我想做一个小应用程序来计算一个数字的所有数字的总和。
例如,如果我有数字 2568,应用程序将计算 2+5+6+8 等于 21。最后,它会计算 21 的数字之和,最终结果将为 3 。
请帮我
基本上你有两种方法来获得一个整数的所有部分的总和。
用数值运算
取数字并建立十的余数并将其相加。然后取数字除以 10 的整数部分。继续。
var value = 2568,
sum = 0;
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
console.log(sum);
使用字符串操作
将数字转换为字符串,拆分字符串并获得一个包含所有数字的数组,并对每个部分执行归约并返回总和。
var value = 2568,
sum = value
.toString()
.split('')
.map(Number)
.reduce(function (a, b) {
return a + b;
}, 0);
console.log(sum);
要返回值,您需要添加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) {
if (n < 10) return n
return sumDigits(n % 10 + sumDigits(Math.floor(n / 10)))
}
sumDigits(2) // 2
sumDigits(2568) // 3
用数学公式:
function sumDigits(n) {
return (--n % 9) + 1;
}
没有数学公式:
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)
);
}
可以使用该函数计算数字总和(基于其他答案):
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 = 21
和2+1 = 3
。
请注意,@FedericoAntonucci 的递归解决方案应该更有效,但如果您需要,它不会为您提供中间数字总和。