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



실력키우기 수학

2815 : 10진수를 2진수로

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



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


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


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

26
11010


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

10진수 26을 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.