diff --git a/cpp/concatenation-of-consecutive-binary-numbers.cpp b/cpp/concatenation-of-consecutive-binary-numbers.cpp new file mode 100644 index 0000000..999a72d --- /dev/null +++ b/cpp/concatenation-of-consecutive-binary-numbers.cpp @@ -0,0 +1,34 @@ +#include + +class Solution { + static const int MOD = 1000000007; + +public: + int concatenatedBinary(int n) + { + long joined_number = 0; + + int padding = 1; + for (int i = 1; i <= n; i++) { + joined_number = ((joined_number << padding) + i) % MOD; + + if ((i & (i + 1)) == 0) { + padding++; + } + } + + return joined_number; + } +}; + +int main() +{ + Solution s; + + assert(s.concatenatedBinary(1) == 1); + assert(s.concatenatedBinary(2) == 6); + assert(s.concatenatedBinary(3) == 27); + assert(s.concatenatedBinary(12) == 505379714); + + return 0; +}