Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sum of odd numbers until reached limit in Javascript

While I was solving a question saying "add odd numbers from 1 to 20", I coded this:

var i, sum=0;
for (i=2; i<=20; i*2){
  sum=sum+i;
}
document.write(sum);

When I launched it through a browser, it did not work. However, when I fixed i*2 into i+=2, it worked.

What am I missing? Am I not able to use *(multiplier) in For Loops?

like image 919
Caleb Hyun Avatar asked Jan 29 '23 02:01

Caleb Hyun


2 Answers

If you need to add odd numbers from 1 to 20, then you need i+=2 as the third parameter of the for and need to initialize the variable to 1 to get the correct result:

var sum = 0;
for (var i = 1; i <= 20; i += 2) {
    sum += i;
}

When you have

i += 2

2 is added to i and the result is stored into i. When you tried

var i, sum=0;
for (i=2; i<=20; i*2){
  sum=sum+i;
}

i*2 calculates the value which is twice as big as i, but it will not change the value of i, so this would "work" instead:

var i, sum=0;
for (i=2; i<=20; i*=2){
  sum=sum+i;
}

where

i *= 2

not only calculates the value twice as big as i, but stores the result into i as well. However, even though this will run, the result will not be correct, since you are using the wrong formula.

Also, you can calculate the result without using a for:

1 + 2 + ... + n = n * (n + 1) / 2

Assuming that n is pair: and since we know that we are "missing" half the numbers and all the pair numbers are bigger exactly with 1 than the previous impair numbers, we can subtract half of the sequence

n * (n + 1) / 2 - n / 2 = (n * (n + 1) - n) / 2 = (n * (n + 1 - 1)) / 2 = n * n / 2

and now we have exactly the double value of what we need, so the final formula is:

sum = n * n / 4;

Let's make this a function

function getOddSumUpTo(limit) {
    if (limit % 2) limit ++;
    return limit * limit / 4;
}

and then:

var sum = getOddSumUpTo(20);

Note that we increment limit if it is odd.

like image 150
Lajos Arpad Avatar answered Jan 31 '23 09:01

Lajos Arpad


The issue is that you're not updating the value of the i in the for loop.

I want add odd numbers from 1 to 20

Then you need to change the initial value of i to 1.

var i, sum = 0;
for (i = 1; i <= 20; i += 2){
  sum += i;
}
document.write(sum);

Also, you can find the sum of odd numbers from 1 to 20 by using a formula.

n = 20;
console.log(n % 2 == 0 ? (n * n)/ 4 : ((n + 1) * (n + 1))/4);
like image 40
Mihai Alexandru-Ionut Avatar answered Jan 31 '23 07:01

Mihai Alexandru-Ionut