알고리즘/알고리즘 공부 내용 정리

[C언어 재귀함수] 10진수를 2진수로 변환하는 2줄짜리 함수 코드

restudy 2021. 8. 8. 02:44
반응형

안녕하세요.

 

 

간단한 문제를 해결할 일이 있어서 풀다가 10진수를 2진수로 변환하는 코드를 까먹어서 검색해보고 있었는데 포스팅하시는 분들이 너무 정석대로 가르치시길래 작은 수 내에서 사용할 수 있는 간단한 재귀함수 변환 코드를 소개합니다.

 

10진수 → 2진수 변환 재귀함수 (최소화 형태)

void f(int n) {
    if(n > 1) f(n/2);
    printf("%d", n%2);
}

 

이게 함수 전문입니다.

복잡하게 배열 형성할 필요없고, 그냥 변환해서 바로 출력해주는 코드입니다.

만약 변환값을 저장을 해야한다면 그 때 배열을 선언해서 메모리에 저장해주면 됩니다만, 간단한 문제를 해결할 때는 이 형태의 함수에서부터 응용해 나가는 것이 좋습니다.

 

간단한 원리

원리는 우리가 10진수를 10의 거듭제곱 꼴로 나누어 자릿수 별로 분리하는 계산법을 2진수에 똑같이 적용시켰다고 생각하면 됩니다.

예를 들어 345를 10진수에서 자릿수별로 분리한다면, 10으로 나눈 나머지 5가 1의 자리, 그 다음 몫인 34를 10으로 나눈 나머지가 10의 자리, 그 다음 몫인 3을 10으로 나눈 나머지가 100의 자리이므로 이를 거꾸로 써주면 345가 됩니다.

마찬가지로 2진수로 변환할 때는 2로 나눈 나머지가 맨 뒷자리에 가며, 그 몫을 2로 나눈 나머지가 뒤에서 두 번째 자리, 그 다음이 그 앞자리, ... 순으로 배열되는 것입니다.

 

바로 실행해 볼 수 있는 응용 코드

#include<stdio.h>

void f(int n) {
    if(n > 1) f(n/2);
    printf("%d", n%2);
}


int main() {
    int n;
    printf("10진수 : ");
    scanf("%d", &n);
    printf("→ 2진수 : ", n);
    f(n);
}

 

테스트해보실 분들은 이 코드를 복사해서 돌려보시면 됩니다.

돌리면 다음과 같이 실행할 수 있습니다.

 

 

그리고 응용하려면 2진수를 재귀함수 루프마다 배열에 값들을 저장해서 쓰시면 됩니다.

 

 

 

반응형