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

C 언어로 특정 자릿수를 다른 숫자로 바꾸는 프로그램 만들기

개요

정수 n이 주어졌을 때, 그 수 안에 포함된 특정 자릿수 x를 다른 숫자 m으로 교체하는 프로그램을 C 언어로 작성하는 방법을 알아보겠습니다. 먼저 교체 대상인 자릿수가 주어진 숫자 안에 존재하는지 확인하고, 존재한다면 해당 자릿수만 새로운 숫자로 바꾸면 됩니다.

예를 들어 숫자 "123"이 주어지고, 교체할 자릿수 x가 "2", 새로 넣을 숫자 m이 5라면 결과는 "153"이 되어야 합니다.

입력·출력 예시

입력: n = 983, digit = 9, replace = 6
출력: 683
설명: 983의 첫 번째 자릿수가 9이므로 이를 6으로 바꾸면 결과는 683이 됩니다.

입력: n = 123, digit = 5, replace = 4
출력: 123
설명: 주어진 숫자 n에 자릿수 5가 없으므로 결과는 원래 숫자와 동일합니다.

문제 해결 접근 방법

  • 일의 자리(맨 뒷자리)부터 차례대로 각 자릿수를 검사합니다.
  • 교체하려는 자릿수를 발견하면, 현재 자릿값 d(처음에는 1)에 교체할 숫자 replace를 곱한 값을 결과에 더합니다.
  • 찾고자 하는 자릿수가 아니라면 원래 자릿수를 그대로 결과에 더해 유지합니다.

알고리즘

함수 int digitreplace(int n, int digit, int replace)
단계 1 -> res=0, d=1, rem 선언 및 초기화
단계 2 -> While(n) 반복
rem을 n%10으로 설정
If rem == digit 이면,
res를 res + replace * d로 설정
Else
res를 res + rem * d로 설정
d *= 10
n /= 10
반복 종료
단계 3 -> res 출력
함수 종료

함수 int main(int argc, char const *argv[])
단계 1 -> n = 983, digit = 9, replace = 7 선언 및 초기화
단계 2 -> 함수 호출 digitreplace(n, digit, replace)
종료

C 코드 구현

#include <stdio.h>

int digitreplace(int n, int digit, int replace) {
int res = 0, d = 1;
int rem;
while(n) {
// 뒤에서부터 한 자리씩 나머지를 구합니다.
rem = n % 10;
// 구한 자릿수가 교체 대상이라면 replace로 바꿉니다.
if(rem == digit)
res = res + replace * d;
// 아니라면 원래 자릿수를 그대로 사용합니다.
else
res = res + rem * d;
d *= 10;
n /= 10;
}
printf("%d\n", res);
return 0;
}

// 메인 함수
int main(int argc, char const *argv[]) {
int n = 983;
int digit = 9;
int replace = 7;
digitreplace(n, digit, replace);
return 0;
}

동작 원리

변수 d는 현재 처리 중인 자리의 자릿값(1, 10, 100, ...)을 나타냅니다. n을 10으로 나눈 나머지로 맨 뒷자리를 하나씩 추출하고, 그 값이 digit과 일치하면 replace에 d를 곱해 결과에 더합니다. 일치하지 않으면 원래 자릿수를 그대로 더합니다. 매 반복이 끝날 때마다 d는 10배씩 커지고 n은 한 자리씩 줄어들어, 결국 모든 자릿수를 검사하게 됩니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다 −

783

983의 첫 번째 자릿수 9가 7로 교체되어 783이 출력되는 것을 확인할 수 있습니다.