LeetCode/cpp/concatenation-of-consecutive-binary-numbers.cpp

35 lines
646 B
C++
Raw Normal View History

#include <cassert>
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;
}