Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 주어진 정수의 모든 0을 1로 바꾸는 프로그램

문제 정의

주어진 정수에 포함된 모든 0(영)을 1로 바꾸는 프로그램을 작성하는 것이 목표입니다.

정수 하나가 입력으로 주어지면, 그 숫자 안에 있는 모든 0을 1로 교체한 결과를 출력해야 합니다.

문제 이해하기

예시를 통해 살펴보겠습니다.

입력이 102410이라면 출력은 112411이 됩니다. 숫자 내의 모든 0 자리가 1로 변경된 것을 확인할 수 있습니다.

알고리즘

정수 내의 모든 0을 1로 바꾸기 위해 아래 알고리즘을 따릅니다.

1단계 − 사용자로부터 정수를 입력받습니다.
2단계 − 정수를 한 자리씩 순회하며 검사합니다.
3단계 − '0'을 만나면 '1'로 교체합니다.
4단계 − 변환된 정수를 출력합니다.

C 프로그램 예제

다음은 주어진 정수에서 모든 0을 1로 바꾸는 C 프로그램입니다.

#include<stdio.h>
int replace(long int number){
    if (number == 0)
    return 0;
    // 마지막 자릿수를 확인하고 필요하면 변경
    int digit = number % 10;
    if (digit == 0)
    digit = 1;
    // 나머지 자릿수를 재귀적으로 변환한 뒤 마지막 자릿수와 결합
    return replace(number/10) * 10 + digit;
}
int Convert(long int number){
    if (number == 0)
        return 1;
    else
        return replace(number);
}
int main(){
    long int number;
    printf("\nEnter any number : ");
    scanf("%ld", &number);
    printf("\nAfter replacement the number is : %ld\n", Convert(number));
    return 0;
}

실행 결과

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

Enter any number: 1056110010
After replacement the number is: 1156111111

코드 동작 원리

이 프로그램은 재귀(recursion) 방식으로 동작합니다.

replace 함수: number % 10으로 가장 마지막 자릿수를 추출합니다. 추출한 자릿수가 0이면 1로 바꾼 뒤, replace(number / 10)을 호출해 앞자리 숫자들을 먼저 변환하고, 그 결과에 10을 곱해 변환된 마지막 자릿수를 이어 붙입니다. 이 과정이 반복되면서 모든 자릿수가 처리됩니다.

Convert 함수: 입력값이 0인 경우를 별도로 처리합니다. 재귀 함수의 기본 종료 조건상 0이 입력되면 0을 반환하게 되므로, 이 경우 1을 반환하도록 예외 처리를 두었습니다.

main 함수: 사용자로부터 숫자를 입력받아 Convert 함수를 호출하고, 변환된 결과를 화면에 출력합니다.

참고로, long int 타입 변수를 다룰 때는 서식 지정자로 %ld를 사용해야 올바르게 입출력됩니다.