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 (returns 1)
  • Use %ld format specifier for long int variables
  • 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.

Updated on: 2026-03-15T14:02:26+05:30

4K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements