Dado un número entero n , la tarea es generar todos los números de desplazamiento a la izquierda posibles. Un número de desplazamiento a la izquierda es un número que se genera cuando todos los dígitos del número se desplazan una posición a la izquierda y el dígito de la primera posición se desplaza al último.
Ejemplos:
Entrada: n = 123
Salida: 231 312
Entrada: n = 1445
Salida: 4451 4514 5144
Acercarse:
- Suponga que n = 123 .
- Multiplique n por 10 , es decir , n = n * 10 = 1230 .
- Agregue el primer dígito al número resultante, es decir , 1230 + 1 = 1231 .
- Resta (primer dígito) * 10 k del número resultante donde k es el número de dígitos en el número original (en este caso, k = 3).
- 1231 – 1000 = 231 es el número de desplazamiento a la izquierda del número original.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the count of digits of n int numberOfDigits(int n) { int cnt = 0; while (n > 0) { cnt++; n /= 10; } return cnt; } // Function to print the left shift numbers void cal(int num) { int digits = numberOfDigits(num); int powTen = pow(10, digits - 1); for (int i = 0; i < digits - 1; i++) { int firstDigit = num / powTen; // Formula to calculate left shift // from previous number int left = ((num * 10) + firstDigit) - (firstDigit * powTen * 10); cout << left << " "; // Update the original number num = left; } } // Driver Code int main() { int num = 1445; cal(num); return 0; }
4451 4514 5144
Complejidad de Tiempo: O(log 10 (num))
Espacio Auxiliar: O(1)
Consulte el artículo completo sobre Generar todas las rotaciones de un número para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA