Как посчитать сумму цифр числа в javascript
Перейти к содержимому

Как посчитать сумму цифр числа в javascript

  • автор:

Как посчитать сумму цифр числа в javascript

Мы хотим сделать этот проект с открытым исходным кодом доступным для людей во всем мире. Пожалуйста, помогите нам перевести это руководство на другие языки.

Светлая тема Тёмная тема
Поделиться

  • Учебник
  • Язык JavaScript
  • Продвинутая работа с функциями
  • Рекурсия и стек

Вычислить сумму чисел до данного

важность: 5

Напишите функцию sumTo(n) , которая вычисляет сумму чисел 1 + 2 + . + n .

sumTo(1) = 1 sumTo(2) = 2 + 1 = 3 sumTo(3) = 3 + 2 + 1 = 6 sumTo(4) = 4 + 3 + 2 + 1 = 10 . sumTo(100) = 100 + 99 + . + 2 + 1 = 5050

Сделайте три варианта решения:

  1. С использованием цикла.
  2. Через рекурсию, т.к. sumTo(n) = n + sumTo(n-1) for n > 1 .
  3. С использованием формулы арифметической прогрессии.

Пример работы вашей функции:

function sumTo(n) < /*. ваш код . */ >alert( sumTo(100) ); // 5050

P.S. Какой вариант решения самый быстрый? Самый медленный? Почему?

P.P.S. Можно ли при помощи рекурсии посчитать sumTo(100000) ?

Решение с помощью цикла:

function sumTo(n) < let sum = 0; for (let i = 1; i return sum; > alert( sumTo(100) );

Решение через рекурсию:

function sumTo(n) < if (n == 1) return 1; return n + sumTo(n - 1); >alert( sumTo(100) );

Решение по формуле: sumTo(n) = n*(n+1)/2 :

function sumTo(n) < return n * (n + 1) / 2; >alert( sumTo(100) );

P.S. Надо ли говорить, что решение по формуле работает быстрее всех? Это очевидно. Оно использует всего три операции для любого n, а цикл и рекурсия требуют как минимум n операций сложения.

Вариант с циклом – второй по скорости. Он быстрее рекурсии, так как операций сложения столько же, но нет дополнительных вычислительных затрат на организацию вложенных вызовов. Поэтому рекурсия в данном случае работает медленнее всех.

P.P.S. Некоторые движки поддерживают оптимизацию «хвостового вызова»: если рекурсивный вызов является самым последним в функции, без каких-либо других вычислений, то внешней функции не нужно будет возобновлять выполнение и не нужно запоминать контекст его выполнения. В итоге требования к памяти снижаются. Но если JavaScript-движок не поддерживает это (большинство не поддерживают), будет ошибка: максимальный размер стека превышен, так как обычно существует ограничение на максимальный размер стека.

  • © 2007—2024 Илья Кантор
  • о проекте
  • связаться с нами
  • пользовательское соглашение
  • политика конфиденциальности

Курсы javascript

Пройтис в цикле по его символам. Преобразовать символ в натуральное число. Суммировать те числа.

17.01.2017, 16:16

Кандидат Javascript-наук

Регистрация: 26.04.2016

Сообщений: 106

Вот именно это и интересует. Как разбить число по символам?
Например, вот так сработает:

'2017'.split('');

— выводиться: 2,0,1,7
А если это делать в функции?

function getNumbersSum(num) < var result = 'num'.split(''); alert(result); >getNumbersSum(2017);

тогда выводиться: n,u,m — и нет никаких чисел

17.01.2017, 16:19

Регистрация: 14.01.2015

Сообщений: 12,990

function getNumbersSum(num)< return num.toString().split('').reduce(function(a, b) < return +a + +b; >) >

17.01.2017, 16:32

Регистрация: 19.08.2010

Сообщений: 14,123

var n=12345; alert((''+n).split(''));

17.01.2017, 23:54

Регистрация: 13.03.2013

Сообщений: 1,572

function getSumNumber(num) < var sum = 0, tmp; while (num) < tmp = num % 10; num = (num - tmp) / 10; sum += tmp; >return sum; > alert(getSumNumber(2610));

вариант без использования преобразований

18.01.2017, 05:12

Регистрация: 30.04.2012

Сообщений: 3,018

var n = 2017; alert( eval(n.toString().split('').join('+')) ); alert( eval(n.toString().replace(/\d/g, '+$&')) );

02.01.2021, 19:32

Новичок на форуме

Регистрация: 02.01.2021

Сообщений: 1

Вот ответ фенкцией.

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.

Как получить сумму цифр из числа?

Дается функция:
function digitSum(n) <> где «n» любое целое число от 0 до бесконечности.

Только только обучаюсь JS. Дошел только до этого:

var reg = /\d/g; return +(n.match(reg));

Но не могу понять, числа который возвращаются это строка или массив? Что делать потом? Использовать reduce?
Дайте истинный путь, пожалуйста. Или может быть последовательность рассуждений. Или я, впринципе, в корне неправильно действую? Ответ не надо 🙂 Хочу подразобраться сам.

  • Вопрос задан более трёх лет назад
  • 17540 просмотров

Строки с цифрами в JavaScript

Давайте найдем, например, сумму первого и второго ее символов:

let test = ‘12345’; alert(test[0] + test[1]); // выведет ’12’ — суммирует как строки

Как вы видите, символы нашей строки также являются строками и суммируются как строки. Пусть мы хотим суммировать их как числа. Используем для этого функцию Number :

let test = ‘12345’; // строка alert(Number(test[0]) + Number(test[1])); // выведет 3

Дана строка ‘12345’ . Найдите сумму цифр этой строки.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *