diff --git a/cpp/difference-of-squares/difference_of_squares.h b/cpp/difference-of-squares/difference_of_squares.h new file mode 100644 index 0000000..25c69e4 --- /dev/null +++ b/cpp/difference-of-squares/difference_of_squares.h @@ -0,0 +1,34 @@ +#pragma once + +#define EXERCISM_RUN_ALL_TESTS + + +namespace squares { + +namespace detail { + +constexpr unsigned sum(unsigned n) +{ + return (n*(n+1))/2; +} + +} + + +constexpr unsigned square_of_sums(unsigned n) +{ + using detail::sum; + return sum(n)*sum(n); +} + +constexpr unsigned sum_of_squares(unsigned n) +{ + return (n*(n+1)*(2*n+1))/6; +} + +constexpr unsigned difference(unsigned n) +{ + return square_of_sums(n) - sum_of_squares(n); +} + +}