diff --git a/cpp/sum-of-multiples/sum_of_multiples.cpp b/cpp/sum-of-multiples/sum_of_multiples.cpp new file mode 100644 index 0000000..702f84e --- /dev/null +++ b/cpp/sum-of-multiples/sum_of_multiples.cpp @@ -0,0 +1,31 @@ +#include "sum_of_multiples.h" + +#include + +namespace sum_of_multiples { + + +number_t to(number_t limit) +{ + return to({3, 5}, limit); +} + +number_t to(const multipliers_t &multipliers, number_t limit) +{ + number_t result = 0; + + for (number_t i = 0; i < limit; ++i) { + + auto is_multiple = [i](number_t m) -> bool { + + return i % m == 0; + }; + + if (std::any_of(multipliers.begin(), multipliers.end(), is_multiple)) + result += i; + } + + return result; +} + +} diff --git a/cpp/sum-of-multiples/sum_of_multiples.h b/cpp/sum-of-multiples/sum_of_multiples.h new file mode 100644 index 0000000..a10a47a --- /dev/null +++ b/cpp/sum-of-multiples/sum_of_multiples.h @@ -0,0 +1,16 @@ +#pragma once + +#include + +#define EXERCISM_RUN_ALL_TESTS + +namespace sum_of_multiples { + +typedef unsigned int number_t; + +typedef std::initializer_list multipliers_t; + +number_t to(number_t limit); +number_t to(const multipliers_t &multipliers, number_t limit); + +}