10진수를 2진수로 > 문제은행

본문 바로가기


실력키우기 수학

2815 : 10진수를 2진수로

제한시간: 1000 ms    메모리제한: 128 MB
해결횟수: 1003 회    시도횟수: 1557 회   



10진수를 입력받아 2진수로 변환하는 프로그램을 작성하시오.


정수 N을 입력받는다. (1 <= N <= 231-1)


입력된 10진수를 2진수로 변환하여 출력한다.

[Copy]
26
[Copy]
11010


10진수를 2진수로 변환하기
10진수를 2진수로 변환하기 위해서는 2진수를 10진수로 변환하는 과정을 역순으로 하여 2씩 묶어가면서 나머지를 1의 자리부터 확정해 나가면 된다.

10진수 21을 2진수로 변환하는 과정은 다음과 같다.


코드1
#include <stdio.h>
int two[50];
int change(int n)
{
    int i;
    for(i=0;;i++) {
        two[i]=n%2;      // 뒤에서부터 i번째 자리의 값을 저장한다.
        n/=2;            // 2로 나눈 몫을 저장한다.
        if(n==0) break;   // 0이 남으면 종료한다.
    }
    return i;
}

int main()
{
    int N, cnt, i;
    scanf("%d", &N);
    cnt = change(N);   // 함수를 호출하여 이진수로 변환한 마지막 위치를 cnt에 저장한다.
    for(i=cnt;i>=0;i--) { // two[0]이 1의 자리이므로 마지막 위치부터 출력한다.
        printf("%d", two[i]);
    }
    return 0;
}

코드분석
change 함수는 10진수를 받아서 two배열의 앞에서부터 2진수로 변환한 값을 저장하고 저장된 마지막 위치를 리턴해 주는 함수이다.
two[0]번이 1의 자리이다. 1의 자리부터 구해지기 때문에 구해진 값을 배열에 저장을 했다가 n이 0이 되어야 출력을 할 수가 있다.

만약 아래와 같이 재귀함수를 사용하면 함수 내에서 재귀적으로 함수를 호출하고 나서 현재의 값을 출력하면 되므로 보다 간단하게 
프로그램을 작성할 수 있다.

#include <stdio.h>
void change(int n)
{
    if (n==0) return;      // 0이면 처리할 것이 없으므로 리턴한다.
    change(n/2);          // 앞자리까지의 결과를 호출하여 처리한다.
    printf("%d", n%2);     // 현재의 위치에 해당하는 값을 출력한다.
}

int main()
{
    int N;
    scanf("%d", &N);
    change(N);
    return 0;
}


출처 : jungol



HancomEducation E-mail : hancomc@hotmail.com, comkiwer@naver.com Tel : 070-7163-5782 FAX : 031-388-0996 정올소개 이용약관 개인정보처리방침
경기도 안양시 동안구 호계동 1065-10 협성골드프라자 601호, 경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호
Copyright@2010-2015 jungol. All right reserved.