# Reverse a number using stack

Given a number , write a program to reverse this number using stack.

Examples:

```Input : 365
Output : 563

Input : 6899
Output : 9986
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

We have already discussed the simple method to reverse a number in this post. In this post we will discuss about how to reverse a number using stack.

The idea to do this is to extract digits of the number and push the digits on to a stack. Once all of the digits of the number are pushed to the stack, we will start poping the contents of stack one by one and form a number.
As stack is a LIFO data structure, digits of the newly formed number will be in reverse order.

Below is the the implementation of above idea:

## C++

 `// CPP program to reverse the number  ` `// using a stack ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Stack to maintain order of digits ` `stack <``int``> st; ` ` `  `// Function to push digits into stack ` `void` `push_digits(``int` `number) ` `{ ` `    ``while` `(number != 0)  ` `    ``{ ` `        ``st.push(number % 10); ` `        ``number = number / 10; ` `    ``} ` `} ` ` `  `// Function to reverse the number ` `int` `reverse_number(``int` `number) ` `{ ` `    ``// Function call to push number's  ` `    ``// digits to stack ` `    ``push_digits(number); ` `     `  `    ``int` `reverse = 0; ` `    ``int` `i = 1; ` `     `  `    ``// Popping the digits and forming  ` `    ``// the reversed number ` `    ``while` `(!st.empty())  ` `    ``{ ` `        ``reverse = reverse + (st.top() * i); ` `        ``st.pop(); ` `        ``i = i * 10; ` `    ``} ` `     `  `    ``// Return the reversed number formed ` `    ``return` `reverse; ` `} ` ` `  `// Driver program to test above function ` `int` `main() ` `{ ` `    ``int` `number = 39997; ` `     `  `    ``// Function call to reverse number ` `    ``cout << reverse_number(number); ` `     `  `    ``return` `0; ` `} `

## Java

 `// Java program to reverse the number ` `// using a stack ` `import` `java.util.Stack; ` ` `  `public` `class` `GFG ` `{ ` `    ``// Stack to maintain order of digits ` `    ``static` `Stack st= ``new` `Stack<>(); ` ` `  `    ``// Function to push digits into stack ` `    ``static` `void` `push_digits(``int` `number) ` `    ``{ ` `        ``while``(number != ``0``) ` `        ``{ ` `            ``st.push(number % ``10``); ` `            ``number = number / ``10``; ` `        ``} ` `    ``} ` ` `  `    ``// Function to reverse the number ` `    ``static` `int` `reverse_number(``int` `number) ` `    ``{ ` `        ``// Function call to push number's ` `        ``// digits to stack ` `        ``push_digits(number); ` `        ``int` `reverse = ``0``; ` `        ``int` `i = ``1``; ` ` `  `        ``// Popping the digits and forming ` `        ``// the reversed number ` `        ``while` `(!st.isEmpty()) ` `        ``{ ` `            ``reverse = reverse + (st.peek() * i); ` `            ``st.pop(); ` `            ``i = i * ``10``; ` `        ``} ` ` `  `        ``// Return the reversed number formed ` `        ``return` `reverse; ` `    ``} ` ` `  `    ``// Driver program to test above function ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``int` `number = ``39997``; ` `        ``System.out.println(reverse_number(number)); ` `    ``} ` `} ` `// This code is contributed by Sumit Ghosh `

## Python3

 `# Python3 program to reverse the  ` `# number using a stack ` ` `  `# Stack to maintain order of digits ` `st ``=` `[]; ` ` `  `# Function to push digits into stack ` `def` `push_digits(number): ` ` `  `    ``while` `(number !``=` `0``):  ` `        ``st.append(number ``%` `10``); ` `        ``number ``=` `int``(number ``/` `10``); ` ` `  `# Function to reverse the number ` `def` `reverse_number(number): ` `     `  `    ``# Function call to push number's  ` `    ``# digits to stack ` `    ``push_digits(number); ` `     `  `    ``reverse ``=` `0``; ` `    ``i ``=` `1``; ` `     `  `    ``# Popping the digits and forming  ` `    ``# the reversed number ` `    ``while` `(``len``(st) > ``0``):  ` `        ``reverse ``=` `reverse ``+` `(st[``len``(st) ``-` `1``] ``*` `i); ` `        ``st.pop(); ` `        ``i ``=` `i ``*` `10``; ` `     `  `    ``# Return the reversed number formed ` `    ``return` `reverse; ` ` `  `# Driver Code ` `number ``=` `39997``; ` ` `  `# Function call to reverse number ` `print``(reverse_number(number)); ` ` `  `# This code is contributed by mits `

## C#

 `// C# program to reverse the number  ` `// using a stack  ` `using` `System; ` `using` `System.Collections.Generic; ` ` `  `class` `GFG ` `{ ` `// Stack to maintain order of digits  ` `public` `static` `Stack<``int``> st = ``new` `Stack<``int``>(); ` ` `  `// Function to push digits into stack  ` `public` `static` `void` `push_digits(``int` `number) ` `{ ` `    ``while` `(number != 0) ` `    ``{ ` `        ``st.Push(number % 10); ` `        ``number = number / 10; ` `    ``} ` `} ` ` `  `// Function to reverse the number  ` `public` `static` `int` `reverse_number(``int` `number) ` `{ ` `    ``// Function call to push number's  ` `    ``// digits to stack  ` `    ``push_digits(number); ` `    ``int` `reverse = 0; ` `    ``int` `i = 1; ` ` `  `    ``// Popping the digits and forming  ` `    ``// the reversed number  ` `    ``while` `(st.Count > 0) ` `    ``{ ` `        ``reverse = reverse + (st.Peek() * i); ` `        ``st.Pop(); ` `        ``i = i * 10; ` `    ``} ` ` `  `    ``// Return the reversed number formed  ` `    ``return` `reverse; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(``string``[] args) ` `{ ` `    ``int` `number = 39997; ` `    ``Console.WriteLine(reverse_number(number)); ` `} ` `} ` ` `  `// This code is contributed by Shrikant13 `

## PHP

 ` `

Output:

```79993
```

Time Complexity: O( logN )
Auxiliary Space: O( logN ), Where N is the input number.