aboutsummaryrefslogtreecommitdiff
path: root/concatenation_binary_num.cpp
blob: b212c0964b297047531a431e4bd04ff6246bb331 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "leetcode.h"

class Solution {
public:
  int concatenatedBinary(int n) {
    string s = decimalToBinary(n);
    return binaryToDecimal(s);
  }

private:
  int mod = 1000000007;
  string decimalToBinary(int n) {
    string str = "";
    for (int i = n; i >= 1; --i) {
      int j = i;
      while (j) {
        str += (j % 2) + '0';
        j /= 2;
      }
    }
    return str;
  }
  int binaryToDecimal(string n) {
    long long ans = 0, p = 1;
    for (int i = 0; i < n.size(); ++i) {
      long long curr = (n[i] - '0') * p;
      p *= 2;
      p %= mod;
      ans += curr;
    }
    return ans % mod;
  }
};

int main() {
  Solution obj;
  cout << obj.concatenatedBinary(3);
}