Сумма чисел массива

138
26 марта 2019, 21:40

Задачи: есть две переменные "a" и "b" необходимо произвести сумму чисел от переменной "а" до переменной "b".

Пример (a =- 1, b = 2) = -1 + 0 + 1 + 2 = 2;

Мой код:

function GetSum(a, b) { 
  var numArray = []; 
  if (a < b) { 
    for (var s = a; s < b; s++) { 
      numArray.push(s); 
    } 
  } 
  numArray.push(b); 
} 
 
console.log(GetSum(-1, 2));

Ответ будет "2".

Так вот как все таки произвести сумму массива?

Answer 1

Для получения суммы на отрезке [a, b] нет необходимости заводить массив, это лишь займет лишнее время.

Операция push вставляет за O(1), так забираете n операций. Потом еще проход по массиву n операций и n операций на суммирование. Таким образом без массива -2*n операций.
n = b - a + 1

Выгоднее просто просуммировать их в одной переменной.

function GetSum(a, b){
    var result = 0;
    // if(b < a) b = [a, a = b][0]; // если бывает такой случай
    for(var i = a;i <= b;i++) result += i;
    return result;
}
print(GetSum(2,-1));
Answer 2

Вы, граждане, совсем уже чувство реальности потеряли:

function sumAllIntegers(start, end) { 
  return (end - start + 1) * (start + end) / 2; 
} 
 
console.log(sumAllIntegers(-1, 2)); 
console.log(sumAllIntegers(1, 100), "(привет от маленького Гаусса)");

Answer 3

в конец функции добавьте:

return numArray.reduce((a, b) => a + b, 0)

либо для старых браузеров:

return numArray.reduce(function(a, b) { return a + b; }, 0)
Answer 4

Чтобы получить сумма элементов массива можно воспользоваться функцией reduce:

numArray.reduce((accumulator, currentValue) => accumulator + currentValue, 0)

То есть код из примера будет выгладить так:

function GetSum( a,b ){
  var numArray=[]; 
  if (a<b){
    for (var s=a;s<b;s++){
      numArray.push(s);
    }
  }
  numArray.push(b);     
  return numArray.reduce((accumulator, currentValue) => accumulator + currentValue, 0)
}
GetSum(-1,2);

Также можно обойтись без массива, например:

function GetSum( a,b ){
  let accumulator = 0;
    for (let i=a; i<=b; i++){
      accumulator += i;
    }
  return accumulator;
}
READ ALSO
Как вызвать magnific popup без клика?

Как вызвать magnific popup без клика?

Как можно вызвать Magnific Popup без клика на кнопку? Я нашел паблик методы в документации, но не могу разобраться как реализовать

166
Проблема с js в браузере

Проблема с js в браузере

Всем привет, пытаюсь отсортировать рандомно созданный массив с координатамиСортирую просто - сравниваю первые координаты

157
SpeechSynthesis API в Yandex Browser

SpeechSynthesis API в Yandex Browser

Скажите, пожалуйста, как заставить "говорить" яндекс браузер на русском? Мб у него немного другое API, потому что нативный JS speechSynthesisgetVoices() возвращает...

141