I am newbie.
I want to make small app which will calculate the sum of all the digits of a number.
For example, if I have the number 2568, the app will calculate 2+5+6+8 which is equal with 21. Finally, it will calculate the sum of 21’s digits and the final result will be 3 .
Please help me
asked Jul 12, 2016 at 16:40
4
Basically you have two methods to get the sum of all parts of an integer number.
-
With numerical operations
Take the number and build the remainder of ten and add that. Then take the integer part of the division of the number by 10. Proceed.
var value = 2568,
sum = 0;
while (value) {
sum += value % 10;
value = Math.floor(value / 10);
}
console.log(sum);
-
Use string operations
Convert the number to string, split the string and get an array with all digits and perform a reduce for every part and return the sum.
var value = 2568,
sum = value
.toString()
.split('')
.map(Number)
.reduce(function (a, b) {
return a + b;
}, 0);
console.log(sum);
For returning the value, you need to addres the value
property.
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"/>
answered Jul 12, 2016 at 18:21
Nina ScholzNina Scholz
374k25 gold badges344 silver badges386 bronze badges
7
How about this simple approach using modulo 9 arithmetic?
function sumDigits(n) {
return (n - 1) % 9 + 1;
}
answered Nov 25, 2017 at 13:07
14
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)
);
}
answered Apr 26, 2021 at 15:42
WesleyACWesleyAC
5246 silver badges11 bronze badges
let’s try recursivity
function sumDigits(n) {
if (n < 10) return n
return sumDigits(n % 10 + sumDigits(Math.floor(n / 10)))
}
sumDigits(2) // 2
sumDigits(2568) // 3
answered Jun 12, 2020 at 20:12
Envy HionEnvy Hion
1841 silver badge8 bronze badges
The sum of digits can be calculated using that function (based on other answers):
function sumDigits(n) {
let sum = 0;
while (n) {
digit = n % 10;
sum += digit;
n = (n - digit) / 10;
}
return sum;
}
If you really need to sum the digits recursively there is recursive version of the function:
function sumDigitsRecursively(n) {
let sum = sumDigits(n);
if (sum < 10)
return sum;
else
return sumDigitsRecursively(sum);
}
The sumDigitsRecursively(2568)
expression will be equal to 3
. Because 2+5+6+8 = 21
and 2+1 = 3
.
Note that recursive solution by @FedericoAntonucci should be more efficient, but it does not give you intermediate sum of digits if you need it.
answered May 30, 2020 at 10:32
KonardKonard
2,19827 silver badges21 bronze badges
5
You could do it this way.
function sums(input) {
let numArr = input.toString().split('');
let sum = numArr.reduce((a, b) => Number(a) + Number(b));
return sum < 10 ? sum : sums(sum);
}
Valor_
3,4219 gold badges59 silver badges108 bronze badges
answered Aug 26, 2021 at 4:35
1
Expanding upon @fethe ‘s answer, this sumOfDigit
function is able to handle large number or 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
answered Jul 30, 2021 at 4:43
yogskiyogski
1711 silver badge10 bronze badges
you can use this function and pass your number to it:
const solution = (n) => {
const arr = `${n}`
let sum = 0;
for (let index = 0; index < arr.length; index++) {
sum += parseInt(arr[index])
}
return sum;
}
answered Jan 30 at 17:19
Дается функция:function digitSum(n) {}
где «n» любое целое число от 0 до бесконечности.
Только только обучаюсь JS. Дошел только до этого:
var reg = /d/g;
return +(n.match(reg));
Но не могу понять, числа который возвращаются это строка или массив? Что делать потом? Использовать reduce?
Дайте истинный путь, пожалуйста. Или может быть последовательность рассуждений. Или я, впринципе, в корне неправильно действую? Ответ не надо Хочу подразобраться сам.
2 ответа
function fSumAllDigits(n) {
return [...n.toString()].reduce((acc, el) => acc + parseInt(el), 0);
}
console.log( fSumAllDigits(111) ); // 3
console.log( fSumAllDigits('123') ); // 6
console.log( fSumAllDigits(700000001) ); // 8
ответ дан 7 ноя 2021 в 14:38
UModeLUModeL
32.4k6 золотых знаков28 серебряных знаков68 бронзовых знаков
2
-
[...''+n]
acc+ +el
:))7 ноя 2021 в 14:51
-
@entithat, скорее
Array.from(n.toString).reduce...
илиn.toString().split('').reduce...
))7 ноя 2021 в 15:44
let x = 0;
for (let i = 0; i < num.length; i++) {
x = x + Number(num[i]);
}
console.log(`Сумма всех цифр числа: ${x}`);
ответ дан 7 ноя 2021 в 14:44
2
-
Почему не
x += Number(num[i])
?7 ноя 2021 в 19:27
-
@OliverPatterson «Потому что потому.» Владимир Путин
– user176262
7 ноя 2021 в 20:21
17.01.2017, 14:19 |
|||
|
|||
Найти сумму цифр числа Есть число 2017, как найти сумму его цифр? |
17.01.2017, 14:35 |
||||
|
||||
Пройтис в цикле по его символам… Преобразовать символ в натуральное число… Суммировать те числа. |
17.01.2017, 15:16 |
||||
|
||||
Вот именно это и интересует. Как разбить число по символам? '2017'.split(''); — выводиться: 2,0,1,7 function getNumbersSum(num){ var result = 'num'.split(''); alert(result); } getNumbersSum(2017); тогда выводиться: n,u,m — и нет никаких чисел |
17.01.2017, 15:19 |
|||
|
|||
function getNumbersSum(num){ return num.toString().split('').reduce(function(a, b) { return +a + +b; }) } |
17.01.2017, 15:32 |
||||
|
||||
Например так… var n=12345; alert((''+n).split('')); |
17.01.2017, 22:54 |
function getSumNumber(num) { var sum = 0, tmp; while (num) { tmp = num % 10; num = (num - tmp) / 10; sum += tmp; } return sum; } alert(getSumNumber(2610)); вариант без использования преобразований |
02.01.2021, 18:32 |
|||
|
|||
Вот ответ фенкцией. function digitSum(y) { let sum = 0, x = String(y); for (let i = 0; i < x.length; i++) { sum += Number(x[i]); } return(sum) } // if alert(digitSum(123)), output is 6. |
s3lfstyle 0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
||||
1 |
||||
Найти сумму цифр в числе09.06.2015, 21:43. Показов 41464. Ответов 22 Метки нет (Все метки)
Только начал учить JS, почему не работает данный код?
0 |
Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
|
09.06.2015, 22:30 |
2 |
)))
0 |
buxtom -13 / 16 / 8 Регистрация: 20.04.2015 Сообщений: 62 |
||||
09.06.2015, 22:30 |
3 |
|||
0 |
Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
|
09.06.2015, 22:35 |
4 |
s3lfstyle, и действительно, на работоспособность ваш код даже и не стал проверять, а зря
0 |
s3lfstyle 0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
||||
09.06.2015, 22:47 [ТС] |
5 |
|||
Почему мне возвращается 1968?
0 |
Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
|
09.06.2015, 22:51 |
6 |
у меня тоже хрень возвращается а вот этот работает
var strNum = prompt(«Введите число», «»); Добавлено через 1 минуту
0 |
0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
|
09.06.2015, 22:53 [ТС] |
7 |
А почему? Добавлено через 1 минуту
0 |
Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
|
09.06.2015, 22:53 |
8 |
s3lfstyle, понял почему берёте остаток
0 |
0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
|
09.06.2015, 22:55 [ТС] |
9 |
В его решении миллион строк, я просто не могу понять, почему моё решение не работает? Я вообще не вижу в своём решении ошибок. Зачем мне перебирать строку, если я перевожу эту строку в число?
0 |
buxtom -13 / 16 / 8 Регистрация: 20.04.2015 Сообщений: 62 |
||||||||
09.06.2015, 22:56 |
10 |
|||||||
1. проблема в вашем коде в том, что операция деления в JavaScript при делении целого на целое автоматически не отбрасывает дробную часть, т. е. как минимум вы должны явно приводить к целому числу отбрасывая дробную часть 2. в строке:
вы используете переменную, значение которой не изменяется…, чтобы именно ваш код работал, можете переделать его по такому виду:
0 |
Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
|
09.06.2015, 22:57 |
11 |
ну потому что for у вас просто перебирает строку, что вообще-то нельзя делать вот таким способом
0 |
0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
|
09.06.2015, 22:59 [ТС] |
12 |
Это из-за динамической типизации? Добавлено через 54 секунды
0 |
BANO Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
||||
09.06.2015, 23:00 |
13 |
|||
вот вам хард кор
Добавлено через 27 секунд
1 |
0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
|
09.06.2015, 23:01 [ТС] |
14 |
Не понял 90% вашего кода, рановато мне пока такое.
0 |
Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
|
09.06.2015, 23:04 |
15 |
s3lfstyle, нету тут челочисленных а вот такой код не должен воспринимать никакие запятые и буквы, он их должен просто отвергать Добавлено через 35 секунд Добавлено через 23 секунды
0 |
0 / 0 / 0 Регистрация: 27.05.2015 Сообщений: 72 |
|
09.06.2015, 23:04 [ТС] |
16 |
Немного не могу понять parseInt(), в чём его задача?
0 |
BANO Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
||||
09.06.2015, 23:06 |
17 |
|||
а вот фиг как только появляется не число он nan выдаёт вот вам нормальный код
0 |
-13 / 16 / 8 Регистрация: 20.04.2015 Сообщений: 62 |
|
09.06.2015, 23:07 |
18 |
Немного не могу понять parseInt(), в чём его задача? например здесь можно прочитать, как работает эта функция
0 |
BANO Ренегат 1740 / 1085 / 386 Регистрация: 06.08.2014 Сообщений: 5,203 Записей в блоге: 1 |
||||
09.06.2015, 23:12 |
19 |
|||
а теперь давайте разясню)) Добавлено через 4 минуты
это перебор массива
0 |
kalabuni супермизантроп 3938 / 2976 / 692 Регистрация: 18.04.2012 Сообщений: 8,625 |
||||
09.06.2015, 23:28 |
20 |
|||
buxtom, ваш код неправильный
0 |