Problem Statement: Convert decimal to binary number.
Examples:
Example 1: Input: N = 15 Output: 1111 Explanation: 15 in binary is represented as "1111". Example 2: Input: 18 Output: 10010 Explanation: 18 in binary is represented as "10010".
Solution
Disclaimer: Don’t jump directly to the solution, try it out yourself first.
Solution 1:
Intuition: Since each number can be represented by the sum of the powers of 2s, we simply have to check from 2^0 to 2^32 if the decimal number is divisible by 2^i or not.
Approach:
- Take an array to store the binary number.
- Now check if the decimal number is divisible by 2 or not.
- If it is divisible by 2,then ith index will be 0,else ith index will be 1.
- Now divide n by 2 and move to the next index.
- Repeat the above steps till n becomes 0.
- Now our binary number is stored in the array but in reverse order.
- Print the array in reverse order.
Code:
C++ Code
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n = 28;
int binary[32] = {0};
int pow = 1;
int i = 0;
while (n) {
binary[i] = n % 2;
i++;
n /= 2;
}
for (int ind = i - 1; ind >= 0; ind--) {
cout << binary[ind];
}
}
Output:
11100
Time Complexity: O(logN)
Space Complexity: O(32).
Java Code
public class Main {
public static void main(String args[]) {
int n = 28;
int[] binary = new int[32];
int pow = 1;
int i = 0;
while (n > 0) {
binary[i] = n % 2;
i++;
n /= 2;
}
for (int ind = i - 1; ind >= 0; ind--) {
System.out.print(binary[ind]);
}
}
}
Output:
11100
Time Complexity: O(logN)
Space Complexity: O(32).
Solution 2:Using bitwise operator(space-optimized)
Intuition: Using the “>>” operator check if the 0th,1st….32nd bit is set or not.
Approach:
- By using right shift operator move to the ith bit.
- Now using “and” operator check if the bit is set or not.
- If bit is set print 1,else print 0.
Code:
C++ Code
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n = 28,flag=0;
for (int i = 32; i >= 0; i--) {
if ((n >> i) & 1) {
flag=1;
cout << 1;
}
else {
if(flag==1)
cout << 0;
}
}
}
Output:
11100
Time Complexity: O(32).
Space Complexity: O(1).
Java Code
public class Main {
public static void main(String args[]) {
int n = 28;
int flag=0;
for (int i = 32; i >= 0; i--) {
int k = n >> i;
if ((k & 1) > 0) {
flag=1;
System.out.print(1);
} else {
if(flag==1)
System.out.print(0);
}
}
}
}
Output:
11100
Time Complexity: O(32).
Space Complexity: O(1).
Special thanks to Pranav Padawe for contributing to this article on takeUforward. If you also wish to share your knowledge with the takeUforward fam, please check out this article