The challenge

Your task is to return the sum of Triangular Numbers up-to-and-including the nth Triangular Number.

Triangular Number: “any of the series of numbers (1, 3, 6, 10, 15, etc.) obtained by continued summation of the natural numbers 1, 2, 3, 4, 5, etc.”

1
2
3
4
5
6
[01]
02 [03]
04 05 [06]
07 08 09 [10]
11 12 13 14 [15]
16 17 18 19 20 [21]

e.g. If 4 is given: 1 + 3 + 6 + 10 = 20.

Triangular Numbers cannot be negative so return 0 if a negative number is given.

The solution in C

Option 1:

1
2
3
4
5
6
int sumTriangularNumbers(int n) {
  if(n<=0) {
    return 0;
  }
  return n*(n+1)*(n+2)/6;
}

Option 2:

1
2
3
4
5
6
7
8
9
int sumTriangularNumbers(int n) {
    int sum = 0, sumTot = 0;
    int i;
    for (i=1; i<= n; i++) {
        sum += i;
        sumTot += sum;
    }
    return sumTot;
}

Option 3:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
int sumTriangularNumbers(int n) {
 int sum=0;
  if(n<0)
    return 0;
  else {
    for(int i=1;i<=n;++i)
      for(int j =1;j<=i;++j)
        sum+=j;
    };
    return sum;
}

Test cases to validate our solution

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#include <criterion/criterion.h>

int sumTriangularNumbers(int);

Test(basicTests, should_pass_all_the_tests_provided) {

  cr_assert_eq(sumTriangularNumbers(6), 56);
  cr_assert_eq(sumTriangularNumbers(34), 7140);
  cr_assert_eq(sumTriangularNumbers(-291), 0);
  cr_assert_eq(sumTriangularNumbers(943), 140205240);
  cr_assert_eq(sumTriangularNumbers(-971), 0);
}