Skip to content

Commit e2a6eae

Browse files
authored
Merge pull request #760 from piyushkumar0707/feat/programs-reverse-number
feat: add Java program to reverse a number
2 parents f9cab5d + 4db3abd commit e2a6eae

File tree

2 files changed

+298
-0
lines changed

2 files changed

+298
-0
lines changed
Lines changed: 297 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,297 @@
1+
---
2+
title: Java Program to Reverse a Number
3+
description: Learn different methods to reverse a number in Java with complete code examples and explanations.
4+
---
5+
6+
## Introduction
7+
8+
Reversing a number is a fundamental programming concept that involves extracting digits from right to left and reconstructing them in reverse order. For example, reversing 1234 gives us 4321.
9+
10+
This program demonstrates multiple approaches to reverse a number in Java, from basic iterative methods to advanced techniques.
11+
12+
## Method 1: Using While Loop (Most Common)
13+
14+
This is the most straightforward approach using digit extraction and mathematical operations.
15+
16+
```java
17+
import java.util.Scanner;
18+
19+
public class ReverseNumber {
20+
public static void main(String[] args) {
21+
Scanner scanner = new Scanner(System.in);
22+
23+
System.out.print("Enter a number to reverse: ");
24+
int number = scanner.nextInt();
25+
26+
int originalNumber = number;
27+
int reversedNumber = 0;
28+
29+
// Handle negative numbers
30+
boolean isNegative = number < 0;
31+
number = Math.abs(number);
32+
33+
while (number != 0) {
34+
int digit = number % 10; // Extract last digit
35+
reversedNumber = reversedNumber * 10 + digit; // Build reversed number
36+
number = number / 10; // Remove last digit
37+
}
38+
39+
// Apply sign if original was negative
40+
if (isNegative) {
41+
reversedNumber = -reversedNumber;
42+
}
43+
44+
System.out.println("Original number: " + originalNumber);
45+
System.out.println("Reversed number: " + reversedNumber);
46+
47+
scanner.close();
48+
}
49+
}
50+
```
51+
52+
**Output:**
53+
54+
```
55+
Enter a number to reverse: 1234
56+
Original number: 1234
57+
Reversed number: 4321
58+
```
59+
60+
## Method 2: Using For Loop
61+
62+
The same logic can be implemented using a for loop, which is more compact but requires knowing the number of digits.
63+
64+
```java
65+
import java.util.Scanner;
66+
67+
public class ReverseNumberForLoop {
68+
69+
// Method to count digits in a number
70+
public static int countDigits(int number) {
71+
if (number == 0) return 1;
72+
int count = 0;
73+
number = Math.abs(number);
74+
while (number > 0) {
75+
count++;
76+
number /= 10;
77+
}
78+
return count;
79+
}
80+
81+
public static void main(String[] args) {
82+
Scanner scanner = new Scanner(System.in);
83+
84+
System.out.print("Enter a number to reverse: ");
85+
int number = scanner.nextInt();
86+
87+
int originalNumber = number;
88+
int reversedNumber = 0;
89+
boolean isNegative = number < 0;
90+
number = Math.abs(number);
91+
92+
int digitCount = countDigits(number);
93+
94+
for (int i = 0; i < digitCount; i++) {
95+
int digit = number % 10;
96+
reversedNumber = reversedNumber * 10 + digit;
97+
number = number / 10;
98+
}
99+
100+
if (isNegative) {
101+
reversedNumber = -reversedNumber;
102+
}
103+
104+
System.out.println("Original number: " + originalNumber);
105+
System.out.println("Reversed number: " + reversedNumber);
106+
107+
scanner.close();
108+
}
109+
}
110+
```
111+
112+
## Method 3: Using String Manipulation
113+
114+
This approach converts the number to a string and uses built-in string methods.
115+
116+
```java
117+
import java.util.Scanner;
118+
119+
public class ReverseNumberString {
120+
public static void main(String[] args) {
121+
Scanner scanner = new Scanner(System.in);
122+
123+
System.out.print("Enter a number to reverse: ");
124+
int number = scanner.nextInt();
125+
126+
// Convert to string and handle negative sign
127+
String numberStr = String.valueOf(Math.abs(number));
128+
129+
// Reverse the string
130+
String reversedStr = new StringBuilder(numberStr).reverse().toString();
131+
132+
// Convert back to integer
133+
int reversedNumber = Integer.parseInt(reversedStr);
134+
135+
// Apply negative sign if original was negative
136+
if (number < 0) {
137+
reversedNumber = -reversedNumber;
138+
}
139+
140+
System.out.println("Original number: " + number);
141+
System.out.println("Reversed number: " + reversedNumber);
142+
143+
scanner.close();
144+
}
145+
}
146+
```
147+
148+
## Method 4: Using Recursion
149+
150+
A recursive approach that demonstrates functional programming concepts.
151+
152+
```java
153+
import java.util.Scanner;
154+
155+
public class ReverseNumberRecursive {
156+
157+
// Recursive method to reverse a number
158+
public static int reverseNumber(int number, int reversedNumber) {
159+
if (number == 0) {
160+
return reversedNumber;
161+
}
162+
163+
int digit = number % 10;
164+
reversedNumber = reversedNumber * 10 + digit;
165+
166+
return reverseNumber(number / 10, reversedNumber);
167+
}
168+
169+
public static void main(String[] args) {
170+
Scanner scanner = new Scanner(System.in);
171+
172+
System.out.print("Enter a number to reverse: ");
173+
int number = scanner.nextInt();
174+
175+
boolean isNegative = number < 0;
176+
int absoluteNumber = Math.abs(number);
177+
178+
int reversedNumber = reverseNumber(absoluteNumber, 0);
179+
180+
if (isNegative) {
181+
reversedNumber = -reversedNumber;
182+
}
183+
184+
System.out.println("Original number: " + number);
185+
System.out.println("Reversed number: " + reversedNumber);
186+
187+
scanner.close();
188+
}
189+
}
190+
```
191+
192+
## Method 5: Complete Program with Palindrome Check
193+
194+
This enhanced version also checks if the number is a palindrome.
195+
196+
```java
197+
import java.util.Scanner;
198+
199+
public class CompleteReverseNumber {
200+
201+
public static int reverseNumber(int number) {
202+
int reversedNumber = 0;
203+
number = Math.abs(number);
204+
205+
while (number != 0) {
206+
int digit = number % 10;
207+
reversedNumber = reversedNumber * 10 + digit;
208+
number = number / 10;
209+
}
210+
211+
return reversedNumber;
212+
}
213+
214+
public static boolean isPalindrome(int number) {
215+
int absNumber = Math.abs(number);
216+
return absNumber == reverseNumber(absNumber);
217+
}
218+
219+
public static void main(String[] args) {
220+
Scanner scanner = new Scanner(System.in);
221+
222+
System.out.print("Enter a number to reverse: ");
223+
int number = scanner.nextInt();
224+
225+
int reversedNumber = reverseNumber(number);
226+
227+
// Apply negative sign if original was negative
228+
if (number < 0) {
229+
reversedNumber = -reversedNumber;
230+
}
231+
232+
System.out.println("Original number: " + number);
233+
System.out.println("Reversed number: " + reversedNumber);
234+
235+
// Check if palindrome
236+
if (isPalindrome(number)) {
237+
System.out.println(Math.abs(number) + " is a palindrome!");
238+
} else {
239+
System.out.println(Math.abs(number) + " is not a palindrome.");
240+
}
241+
242+
scanner.close();
243+
}
244+
}
245+
```
246+
247+
**Sample Output:**
248+
249+
```
250+
Enter a number to reverse: 12321
251+
Original number: 12321
252+
Reversed number: 12321
253+
12321 is a palindrome!
254+
```
255+
256+
## Key Concepts Explained
257+
258+
### 1. **Digit Extraction**
259+
260+
- `number % 10` extracts the last digit
261+
- `number / 10` removes the last digit
262+
263+
### 2. **Building Reversed Number**
264+
265+
- `reversedNumber * 10 + digit` adds the extracted digit to the left
266+
267+
### 3. **Handling Negative Numbers**
268+
269+
- Store the sign separately and apply it at the end
270+
- Work with absolute value during reversal
271+
272+
### 4. **Edge Cases**
273+
274+
- Single digit numbers (0-9)
275+
- Negative numbers
276+
- Numbers ending with zeros (e.g., 1200 becomes 21)
277+
278+
## Time and Space Complexity
279+
280+
- **Time Complexity**: O(log n) where n is the input number (number of digits)
281+
- **Space Complexity**: O(1) for iterative methods, O(log n) for recursive method
282+
283+
## Common Applications
284+
285+
1. **Palindrome Detection**: Checking if a number reads the same forwards and backwards
286+
2. **Mathematical Operations**: Various number theory problems
287+
3. **Data Processing**: Reversing sequences or patterns
288+
4. **Algorithm Practice**: Understanding digit manipulation techniques
289+
290+
## Practice Exercises
291+
292+
1. Modify the program to reverse only the digits, keeping the sign in the original position
293+
2. Create a version that reverses numbers in different bases (binary, octal, hexadecimal)
294+
3. Implement a method that reverses alternating digits (1st, 3rd, 5th, etc.)
295+
4. Write a program that finds all palindromic numbers in a given range
296+
297+
This program provides a solid foundation for understanding digit manipulation in Java programming!

content/programs/meta.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"---Loops & Recursion---",
2727
"factorial-in-java",
2828
"java-program-to-find-nth-fibonacci-number",
29+
"java-program-to-reverse-a-number",
2930

3031
"---Division Logic---",
3132
"find-quotient-and-reminder",

0 commit comments

Comments
 (0)