对一个数的所有数字求和 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 = 21
和 2+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);
}
我是新手
我想制作一个小应用程序来计算一个数字的所有数字的总和。
比如我有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 = 21
和 2+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);
}