Given an integer n, the task is to generate all the left shift numbers possible. A left shift number is a number that is generated when all the digits of the number are shifted one position to the left and the digit at the first position is shifted to the last.
Examples:
Input: n = 123
Output: 231 312
Input: n = 1445
Output: 4451 4514 5144
Approach:
- Assume n = 123.
- Multiply n with 10 i.e. n = n * 10 = 1230.
- Add the first digit to the resultant number i.e. 1230 + 1 = 1231.
- Subtract (first digit) * 10k from the resultant number where k is the number of digits in the original number (in this case, k = 3).
- 1231 – 1000 = 231 is the left shift number of the original number.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int numberOfDigits( int n)
{
int cnt = 0;
while (n > 0) {
cnt++;
n /= 10;
}
return cnt;
}
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;
int left
= ((num * 10) + firstDigit)
- (firstDigit * powTen * 10);
cout << left << " " ;
num = left;
}
}
int main()
{
int num = 1445;
cal(num);
return 0;
}
|
Java
class GFG
{
static int numberOfDigits( int n)
{
int cnt = 0 ;
while (n > 0 )
{
cnt++;
n /= 10 ;
}
return cnt;
}
static void cal( int num)
{
int digits = numberOfDigits(num);
int powTen = ( int ) Math.pow( 10 , digits - 1 );
for ( int i = 0 ; i < digits - 1 ; i++)
{
int firstDigit = num / powTen;
int left = ((num * 10 ) + firstDigit) -
(firstDigit * powTen * 10 );
System.out.print(left + " " );
num = left;
}
}
public static void main(String[] args)
{
int num = 1445 ;
cal(num);
}
}
|
Python3
def numberofDigits(n):
cnt = 0
while n > 0 :
cnt + = 1
n / / = 10
return cnt
def cal(num):
digit = numberofDigits(num)
powTen = pow ( 10 , digit - 1 )
for i in range (digit - 1 ):
firstDigit = num / / powTen
left = (num * 10 + firstDigit -
(firstDigit * powTen * 10 ))
print (left, end = " " )
num = left
num = 1445
cal(num)
|
C#
using System;
public class GFG{
static int numberOfDigits( int n)
{
int cnt = 0;
while (n > 0) {
cnt++;
n /= 10;
}
return cnt;
}
static void cal( int num)
{
int digits = numberOfDigits(num);
int powTen = ( int )Math.Pow(10, digits - 1);
for ( int i = 0; i < digits - 1; i++) {
int firstDigit = num / powTen;
int left
= ((num * 10) + firstDigit)
- (firstDigit * powTen * 10);
Console.Write(left + " " );
num = left;
}
}
static public void Main (){
int num = 1445;
cal(num);
}
}
|
PHP
<?php
function numberOfDigits( $n )
{
$cnt = 0;
while ( $n > 0)
{
$cnt ++;
$n = floor ( $n / 10);
}
return $cnt ;
}
function cal( $num )
{
$digits = numberOfDigits( $num );
$powTen = pow(10, $digits - 1);
for ( $i = 0; $i < $digits - 1; $i ++)
{
$firstDigit = floor ( $num / $powTen );
$left
= (( $num * 10) + $firstDigit ) -
( $firstDigit * $powTen * 10);
echo $left , " " ;
$num = $left ;
}
}
$num = 1445;
cal( $num );
?>
|
Javascript
<script>
function numberOfDigits(n)
{
let cnt = 0;
while (n > 0) {
cnt++;
n = parseInt(n / 10, 10);
}
return cnt;
}
function cal(num)
{
let digits = numberOfDigits(num);
let powTen = Math.pow(10, digits - 1);
for (let i = 0; i < digits - 1; i++) {
let firstDigit = parseInt(num / powTen, 10);
let left = ((num * 10) + firstDigit)
- (firstDigit * powTen * 10);
document.write(left + " " );
num = left;
}
}
let num = 1445;
cal(num);
</script>
|
Time Complexity: O(log10n)
Auxiliary Space: O(1), since no extra space has been taken.