Open in App
Not now

# C++ Program to Rotate digits of a given number by K

• Last Updated : 27 Jan, 2022

Given two integers N and K, the task is to rotate the digits of N by K. If K is a positive integer, left rotate its digits. Otherwise, right rotate its digits.

Examples:

Input: N = 12345, K = 2
Output: 34512Â
Explanation:Â
Left rotating N(= 12345) by K(= 2) modifies N to 34512.Â
Therefore, the required output is 34512

Input: N = 12345, K = -3
Output: 34512Â
Explanation:Â
Right rotating N(= 12345) by K( = -3) modifies N to 34512.Â
Therefore, the required output is 34512

Approach: Follow the steps below to solve the problem:

• Initialize a variable, say X, to store the count of digits in N.
• Update K = (K + X) % X to reduce it to a case of left rotation.
• Remove the first K digits of N and append all the removed digits to the right of the digits of N.
• Finally, print the value of N.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement ` `// the above approach ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to find the count of ` `// digits in N ` `int` `numberOfDigit(``int` `N) ` `{ ` ` `  `    ``// Stores count of ` `    ``// digits in N ` `    ``int` `digit = 0; ` ` `  `    ``// Calculate the count ` `    ``// of digits in N ` `    ``while` `(N > 0) { ` ` `  `        ``// Update digit ` `        ``digit++; ` ` `  `        ``// Update N ` `        ``N /= 10; ` `    ``} ` `    ``return` `digit; ` `} ` ` `  `// Function to rotate the digits of N by K ` `void` `rotateNumberByK(``int` `N, ``int` `K) ` `{ ` ` `  `    ``// Stores count of digits in N ` `    ``int` `X = numberOfDigit(N); ` ` `  `    ``// Update K so that only need to ` `    ``// handle left rotation ` `    ``K = ((K % X) + X) % X; ` ` `  `    ``// Stores first K digits of N ` `    ``int` `left_no = N / (``int``)(``pow``(10, X - K)); ` ` `  `    ``// Remove first K digits of N ` `    ``N = N % (``int``)(``pow``(10, X - K)); ` ` `  `    ``// Stores count of digits in left_no ` `    ``int` `left_digit = numberOfDigit(left_no); ` ` `  `    ``// Append left_no to the right of ` `    ``// digits of N ` `    ``N = (N * (``int``)(``pow``(10, left_digit))) + left_no; ` `    ``cout << N; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `N = 12345, K = 7; ` ` `  `    ``// Function Call ` `    ``rotateNumberByK(N, K); ` `    ``return` `0; ` `} ` ` `  `// The code is contributed by Dharanendra L V`

Output:Â

`34512`

Â

Time Complexity: O(log10N)
Auxiliary Space: O(1)

Please refer complete article on Rotate digits of a given number by K for more details!

My Personal Notes arrow_drop_up
Related Articles