Dados dos números enteros positivos L y R . La tarea es convertir todos los números de L a R en números binarios. La longitud de todos los números binarios debe ser la misma.
Ejemplos:
Entrada: L = 2, R = 4
Salida:
010
011
100
Explicación: La representación binaria de los números: 2 = 10, 3 = 11 y 4 = 100.
Para que los números tengan la misma longitud, se agrega un 0 anterior al binario representación de 3 y 4.Entrada: L = 2, R = 8
Salida:
0010
0011
0100
0101
0110
0111
1000
Enfoque: siga el enfoque mencionado a continuación para resolver el problema.
- Para determinar la longitud de los números binarios resultantes, lleve el logaritmo de R+1 a la base 2.
- Luego, recorra de L a R y convierta cada número a binario de longitud determinada.
- Guarde cada número e imprímalo al final.
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ code to implement the approach #include <bits/stdc++.h> using namespace std; // Function to convert a number to binary vector<int> convertToBinary(int num, int length) { vector<int> bits(length, 0); if (num == 0) { return bits; } int i = length - 1; while (num != 0) { bits[i--] = (num % 2); // Integer division // gives quotient num = num / 2; } return bits; } // Function to convert all numbers // in range [L, R] to binary of // same length vector<vector<int> > getAllBinary(int l, int r) { // Length of the binary numbers int n = (int) ceil(log(r+1) / log (2)); vector<vector<int> > binary_nos; for (int i = l; i <= r; i++) { vector<int> bits = convertToBinary(i, n); binary_nos.push_back(bits); } return binary_nos; } // Driver code int main() { int L = 2, R = 8; vector<vector<int> > binary_nos = getAllBinary(L, R); for (int i = 0; i < binary_nos.size(); i++) { for (int j = 0; j < binary_nos[i].size(); j++) cout << binary_nos[i][j]; cout << endl; } return 0; }
Java
// Java code to implement the approach import java.util.*; public class GFG { // Function to convert a number to binary static ArrayList<Integer> convertToBinary(int num, int length) { ArrayList<Integer> bits= new ArrayList<Integer>(); for(int i = 0; i < length; i++) { bits.add(0); } if (num == 0) { return bits; } int i = length - 1; while (num != 0) { bits.set(i, (num % 2)); i = i - 1; // Integer division // gives quotient num = num / 2; } return bits; } // Function to convert all numbers // in range [L, R] to binary of // same length static ArrayList<ArrayList<Integer> > getAllBinary(int l, int r) { // Length of the binary numbers double x = Math.log(r+1); double y = Math.log (2); int n = (int) Math.ceil(x / y); ArrayList<ArrayList<Integer> > binary_nos = new ArrayList<ArrayList<Integer> >(); for (int i = l; i <= r; i++) { ArrayList<Integer> bits = convertToBinary(i, n); binary_nos.add(bits); } return binary_nos; } // Driver code public static void main(String args[]) { int L = 2, R = 8; ArrayList<ArrayList<Integer> > binary_nos = getAllBinary(L, R); for (int i = 0; i < binary_nos.size(); i++) { for (int j = 0; j < binary_nos.get(i).size(); j++) { System.out.print(binary_nos.get(i).get(j)); } System.out.println(); } } } // This code is contributed by Samim Hossain Mondal.
Python3
# Python 3 code to implement the approach import math # Function to convert a number to binary def convertToBinary(num, length): bits = [0]*(length) if (num == 0): return bits i = length - 1 while (num != 0): bits[i] = (num % 2) i -= 1 # Integer division # gives quotient num = num // 2 return bits # Function to convert all numbers # in range [L, R] to binary of # same length def getAllBinary(l, r): # Length of the binary numbers n = int(math.ceil(math.log(r+1)/ math.log(2))) binary_nos = [] for i in range(l, r + 1): bits = convertToBinary(i, n) binary_nos.append(bits) return binary_nos # Driver code if __name__ == "__main__": L = 2 R = 8 binary_nos = getAllBinary(L, R) for i in range(len(binary_nos)): for j in range(len(binary_nos[i])): print(binary_nos[i][j], end="") print() # This code is contributed by ukasp.
C#
// C# code to implement the approach using System; using System.Collections.Generic; public class GFG { // Function to convert a number to binary static List<int> convertToBinary(int num, int length) { List<int> bits = new List<int>(); int i; for (i = 0; i < length; i++) { bits.Add(0); } if (num == 0) { return bits; } i = length - 1; while (num != 0) { bits[i] = (num % 2); i = i - 1; // Integer division // gives quotient num = num / 2; } return bits; } // Function to convert all numbers // in range [L, R] to binary of // same length static List<List<int>> getAllBinary(int l, int r) { // Length of the binary numbers double x = Math.Log(r + 1); double y = Math.Log(2); int n = (int)Math.Ceiling(x / y); List<List<int>> binary_nos = new List<List<int>>(); for (int i = l; i <= r; i++) { List<int> bits = convertToBinary(i, n); binary_nos.Add(bits); } return binary_nos; } // Driver code public static void Main() { int L = 2, R = 8; List<List<int>> binary_nos = getAllBinary(L, R); for (int i = 0; i < binary_nos.Count; i++) { for (int j = 0; j < binary_nos[i].Count; j++) { Console.Write(binary_nos[i][j]); } Console.WriteLine(""); } } } // This code is contributed by Saurabh Jaiswal
Javascript
<script> // JavaScript code to implement the approach // Function to convert a number to binary const convertToBinary = (num, length) => { let bits = new Array(length).fill(0); if (num == 0) { return bits; } let i = length - 1; while (num != 0) { bits[i--] = (num % 2); // Integer division // gives quotient num = parseInt(num / 2); } return bits; } // Function to convert all numbers // in range [L, R] to binary of // same length const getAllBinary = (l, r) => { // Length of the binary numbers let n = Math.ceil(Math.log(r + 1) / Math.log(2)); let binary_nos = []; for (let i = l; i <= r; i++) { let bits = convertToBinary(i, n); binary_nos.push(bits); } return binary_nos; } // Driver code let L = 2, R = 8; let binary_nos = getAllBinary(L, R); for (let i = 0; i < binary_nos.length; i++) { for (let j = 0; j < binary_nos[i].length; j++) document.write(binary_nos[i][j]); document.write("<br/>"); } // This code is contributed by rakeshsahni </script>
Producción
0010 0011 0100 0101 0110 0111 1000
Complejidad de Tiempo: O(N * logR) donde N = (R – L + 1)
Espacio Auxiliar: O(N * logR)