문제)

10진수의 데이터를 입력받아서 2진수, 8진수, 16진수로 각각 출력하시오.

단, 배열이나 임시 저장 공간없이 바로 출력합니다.

 

 

입력>

정수 하나를 입력하세요. >> 256

 

출력>

2 진수: 00000000000000000000000100000000
8 진수: 400
16진수: 100

 

 

답은 아래에... ↓

 


 

 

 

 

 

스스로 풀어보시고... ↓

 

 

 

 

 

 

 


 

 

 

 

 

아래 답과 비교해보세요. ↓

 

 

 

 

 

 

 


#include <stdio.h>
 
void print_bin(int value)
{
    int i = 0;

    for(i = 31; i >= 0; i--) {
        printf("%d", (value >> i) & 1);
    }
}

void print_oct(int value)
{
    int count = 0;
    int i;
    
    for(i = 0; i < 32; i += 3) {
        if((value >> i) > 0 ) {
            count = i / 3;
        }
    }

    for(i = count * 3; i >= 0; i -= 3) {
        printf("%d", (value >> i) & 7);
    }
}

void print_hex(int value)
{
    int count = 0;
    int i;
    int hex;
    
    for(i = 0; i < 32; i += 4) {
        if((value >> i) > 0 ) {
            count = i / 4;
        }
    }
    
    for(i = count * 4; i >= 0; i -= 4) {
        hex = ((value >> i) & 15);
        if(hex < 10) {
            printf("%d", hex);
        } else {
            printf("%c", hex + 55);
        }
    }
}

int main(int argc, char **argv)
{
    int i;
    
    while(1) {
        printf("정수 하나를 입력하세요. >> ");
        scanf("%d", &i);
        if(i < 0) {
            continue;
        } else if(i == 0) {
            printf("종료합니다.\n");
            break;
        }
        printf("2 진수: ");
        print_bin(i);
        printf("\n");
        printf("8 진수: ");
        print_oct(i);
        printf("\n");
        printf("16진수: ");
        print_hex(i);
        printf("\n");
    }
    return 0;
}
블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

댓글을 달아 주세요