# Convert Binary to Octal

Problem Statement: Convert a binary number to an octal number

Examples:

```Example 1:.
Input: N = 1100110
Output: 146
Explanation: 1100110 when converted to octal number is “146”.

Example 2:
Input: 11111
Output: 37
Explanation: 11111 when converted to octal number is “37”.```

### Solution

Disclaimer: Don’t jump directly to the solution, try it out yourself first.

Intuition: Since we have to convert it into an octal number, every bit should be between 0 to 7. We know that every number can be represented by the power of 2. So we will use the 4 2 1 rule, since using 4 2 1 we can make any number between 0 to 7. Approach:  4 2 1 are 3 digits, so we will divide the string into parts of 3. In the diagram since the length of the string is 7,”00” is added to the left to make the length of the string multiple of 3.

• Let n be length of string.Add appropriate number of “0” at the beginning of string to make the length of string divisible by 3.
• Now transverse from 0 to n.If the ith bit is set add 4,if (i+1)th bit is set add 2 and if (i+2)th bit is set add 1.This will be one bit of the octal number.
• Then increment i by 3,and repeat the 2nd step.

Code:

## C++ Code

``````#include<bits/stdc++.h>
using namespace std;
int main()
{
string s = "1100110";
int n = s.length();
if (n % 3 == 1) {
s = "00" + s;
}
else if (n % 3 == 2) {
s = "0" + s;
}
n = s.length();
string ans = "";
for (int i = 0; i < n; i += 3) {
int temp = (s[i] - '0') * 4 + (s[i + 1] - '0') * 2 + (s[i + 2] - '0') * 1;
ans += (temp + '0');
}
cout << ans;
}
``````

Output:

The octal equivalent of the given binary number is 146

Time Complexity: O(n), As we are traversing through only one for a loop.

Space Complexity: O(1).

## Java Code

``````public class Main {
public static void main(String args[]) {
String s = "1100110";
int n = s.length();
//adding appropriate "0" to the left of
//string to make the length divisible by 3.
if (n % 3 == 1) {
s = "00" + s;
} else if (n % 3 == 2) {
s = "0" + s;
}
n = s.length();
String ans = "";
for (int i = 0; i < n; i += 3) {
int temp = (s.charAt(i) - '0') * 4 + (s.charAt(i + 1) - '0') * 2 + (s.charAt(i + 2) - '0') * 1;
ans = ans + Integer.toString(temp);
}
System.out.print(ans);
}
}
``````

Output:

The octal equivalent of the given binary number is 146

Time Complexity: O(n), As we are traversing through only one for a loop.

Space Complexity: O(1).