Skip to content

Commit 28abbdc

Browse files
feat: add Java program to reverse a number
- Comprehensive tutorial with 5 different approaches - While loop method (most common approach) - For loop implementation with digit counting - String manipulation using StringBuilder - Recursive approach for functional programming - Complete program with palindrome detection - Handles negative numbers and edge cases - Includes time/space complexity analysis
1 parent 388ea72 commit 28abbdc

11 files changed

Lines changed: 351 additions & 47 deletions

File tree

content/programs/contents.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ description: A collection of basic Java programs categorized by topic.
1818
11. [Calculate Power of a Number](/programs/calculate-power-of-a-number)
1919
12. [Calculate Compound Interest](/programs/calculate-compound-interest)
2020
13. [Calculate Factorial of a Number](/programs/factorial-in-java)
21+
14. [Java Program to Reverse a Number](/programs/java-program-to-reverse-a-number)
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
@@ -24,6 +24,7 @@
2424
"---Loops & Recursion---",
2525
"factorial-in-java",
2626
"java-program-to-find-nth-fibonacci-number",
27+
"java-program-to-reverse-a-number",
2728

2829
"---Division Logic---",
2930
"find-quotient-and-reminder",

src/app/(site)/about/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ export default function AboutPage() {
142142
>
143143
Our platform bridges complex Java concepts with real-world
144144
application through interactive tutorials, hands-on exercises, and
145-
structured learning paths. Whether you&apos;re a complete beginner or
146-
experienced developer, our community-driven approach ensures
145+
structured learning paths. Whether you&apos;re a complete beginner
146+
or experienced developer, our community-driven approach ensures
147147
accessible, practical learning for everyone.
148148
</motion.p>
149149
</div>

src/app/(site)/legal/privacy/page.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,11 @@ export default function PrivacyPolicyPage(): React.ReactElement {
2121
<div className="prose prose-neutral dark:prose-invert max-w-none">
2222
<h2>1. Introduction</h2>
2323
<p>
24-
Welcome to Javaistic (&quot;we,&quot; &quot;our,&quot; or &quot;us&quot;). We are committed to
25-
protecting your privacy and ensuring transparency. This Privacy Policy
26-
explains our practices regarding information handling on our open
27-
source educational platform for learning Java programming.
24+
Welcome to Javaistic (&quot;we,&quot; &quot;our,&quot; or
25+
&quot;us&quot;). We are committed to protecting your privacy and
26+
ensuring transparency. This Privacy Policy explains our practices
27+
regarding information handling on our open source educational platform
28+
for learning Java programming.
2829
</p>
2930
<p>
3031
<strong>Important:</strong> Javaistic does not require user accounts
@@ -69,8 +70,8 @@ export default function PrivacyPolicyPage(): React.ReactElement {
6970
If you choose to contribute to the Javaistic project through our
7071
public GitHub repository, any information you provide (such as GitHub
7172
username, email for commits, or pull request content) will be handled
72-
according to GitHub&apos;s privacy policies and our open source licensing
73-
terms.
73+
according to GitHub&apos;s privacy policies and our open source
74+
licensing terms.
7475
</p>
7576

7677
<h2>4. How We Use Information</h2>
@@ -129,9 +130,9 @@ export default function PrivacyPolicyPage(): React.ReactElement {
129130
<p>
130131
Javaistic is an educational platform intended for learners of all ages
131132
interested in Java programming. Since we do not collect personal
132-
information, there are no special considerations for children&apos;s data.
133-
However, we recommend that children under 13 have parental guidance
134-
when accessing technical content.
133+
information, there are no special considerations for children&apos;s
134+
data. However, we recommend that children under 13 have parental
135+
guidance when accessing technical content.
135136
</p>
136137

137138
<h2>8. International Users</h2>

0 commit comments

Comments
 (0)