Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
Selected Reading
C program to replace all zeros with one in a given integer.
In C programming, replacing all zeros with ones in an integer requires digit-by-digit processing. This can be achieved using recursion or iterative approaches to extract, modify, and reconstruct the number.
Syntax
int replaceZeros(long int number);
Algorithm
Follow these steps to replace all zeros with ones in an integer −
- Step 1 − Input the integer from the user
- Step 2 − Traverse the integer digit by digit
- Step 3 − If a zero is encountered, replace it with one
- Step 4 − Reconstruct and return the modified number
Method 1: Using Recursion
This approach uses recursion to process each digit from right to left −
#include <stdio.h>
int replaceZeros(long int number) {
if (number == 0)
return 0;
/* Extract last digit and replace if zero */
int digit = number % 10;
if (digit == 0)
digit = 1;
/* Process remaining digits recursively */
return replaceZeros(number / 10) * 10 + digit;
}
int convertNumber(long int number) {
if (number == 0)
return 1; /* Special case: input 0 becomes 1 */
else
return replaceZeros(number);
}
int main() {
long int number;
printf("Enter any number: ");
scanf("%ld", &number);
printf("After replacement: %d<br>", convertNumber(number));
return 0;
}
Enter any number: 102410 After replacement: 112411
Method 2: Using Iterative Approach
This method processes digits iteratively using mathematical operations −
#include <stdio.h>
long int replaceZerosIterative(long int number) {
if (number == 0)
return 1;
long int result = 0;
long int multiplier = 1;
while (number > 0) {
int digit = number % 10;
if (digit == 0)
digit = 1;
result = digit * multiplier + result;
multiplier *= 10;
number /= 10;
}
return result;
}
int main() {
long int number;
printf("Enter any number: ");
scanf("%ld", &number);
printf("Original number: %ld<br>", number);
printf("After replacement: %ld<br>", replaceZerosIterative(number));
return 0;
}
Enter any number: 1056110010 Original number: 1056110010 After replacement: 1156111111
Comparison
| Method | Approach | Space Complexity | Advantages |
|---|---|---|---|
| Recursion | Function calls | O(log n) | Clean, readable code |
| Iterative | Loop-based | O(1) | Memory efficient |
Key Points
- Both approaches handle the special case where input is
0(returns1) - Use
%ldformat specifier forlong intvariables - Time complexity is O(log n) where n is the input number
Conclusion
Replacing zeros with ones in an integer can be efficiently done using either recursion or iteration. The recursive approach is more intuitive, while the iterative method is more memory-efficient for large numbers.
Advertisements
