C_C++

(C언어) 10진수를 2진수로 변환: 배열 이용

고니자니 2022. 10. 23. 08:24
반응형

#10진수 #2진수 #십진수 #이진수 #변환 #바꾸기 #배열

 

10진수를 2진수로 변환하는 프로그램입니다.

바뀐 2진수를 배열에 저장해서 출력하는 방법입니다.

 

(방법)

a=13;  // a는 13이라 가정

(1) a를 2로 나눈 나머지를 배열에 저장  →→ 13%2 →→ 1

(2) a를 2로 나는 몫으로 변경   →→ 13/2 →→ a=6

위의 (1)과 (2)의 과정을  a가 0보다 큰면 계속 반복

 

a를 2로 나눈 나머지 →→ 6%2 →→ 0

a를 2로 나눈 몫으로 변경, 6/2 →→ a=3

 

3 % 2 →→ 1

3 / 2 →→ a=1

 

1 % 2 →→ 1

1 / 2 →→   a=0, 몫이 0이므로 반복을 종료함

 

위에서 빨갛게 표현된 숫자가 배열의 뒤에서 부터 저장되어 있으므로, 앞에서 부터 출력하면 됨

1 1 0 1

 

C언어 프로그램으로 표현하면 다음과 같습니다.

#define _CRT_SECURE_NO_WARNINGS   // 비주얼스튜디오

#include <stdio.h>
int main()
{
    int bin[32] = { 0 };    // 모두 0으로 초기화
    int i, a, n = 31;
    scanf("%d", &a);

    while (a > 0)
    {
        bin[n--] = a % 2;   // 2로 나눈 나머지
        a /= 2;             // 2로 나눈 몫
    }
    for (i = 0; i < 32; i++)
        printf("%d", bin[i]);
    printf("\n\n");

    return 0;
}

(Output)

 

앞 부분의 0을 출력하지 않기 위해서는 코드를 다음과 같이 수정합니다.

#define _CRT_SECURE_NO_WARNINGS  // 비주얼스튜디오

#include <stdio.h>
int main()
{
    int bin[32] = { 0 };    // 모두 0으로 초기화
    int i, a, n = 31;
    int blank = 0;          // -- 추가된 코드
    scanf("%d", &a);

    while (a > 0)
    {
        bin[n--] = a % 2;   // 2로 나눈 나머지
        a /= 2;             // 2로 나눈 몫
    }

    for (i = 0; i < 32; i++)
    {
        if (blank == 0 && bin[i] != 0) // 추가된 코드 -- 최초 0이 아닌 값을 찾음
            blank = 1;      
        if(blank==1)                   // -- 추가된 코드
            printf("%d", bin[i]);
    }
    printf("\n\n");

    return 0;
}

(Output)

 

 

 

728x90
반응형