사용자 도구

사이트 도구


algorithm:0dotg

문제로 풀어보는 알고리즘 36쪽 0.g 문제

10진수를 입력 받아서 2진수로 출력

작성한 코드

#include <stdio.h>
 
#define DEF_MAX 32
 
struct MyStack {
    int data[DEF_MAX];
    int top;
};
 
void init_stack(struct MyStack* st);
void push_data(struct MyStack* st, int value);
int pop_data(struct MyStack* st);
int compute_count(struct MyStack* st);
 
void output_binary_by_int(int param_number);
 
int main(int argc, char* argv[]) {
 
    int number = 0;
 
    printf("number = ");
    scanf("%d", &number);
 
    output_binary_by_int(number);
 
    printf("argc: %d, argv: %s\n", argc, argv[0]);
    return 0;
}
 
void output_binary_by_int(int param_number) {
    int remain = 0;
    int share = 0;
    int number = param_number;
    struct MyStack myst;
    int i = 0;
    int end_of = 0;
 
    if (number == 0) {
        printf("0\n");
        return;
    }
 
    init_stack(&myst);
 
    for (; number > 1; ) { 
        remain = number % 2;
        share = number / 2;
        number = share;
 
        push_data(&myst, remain);
    }
    if (number == 1) {
        push_data(&myst, 1);
    }
 
    end_of = compute_count(&myst);
    for (i = 0; i < end_of; i++) {
        printf("%d", pop_data(&myst));
    }
    printf("\n");
}
 
int pop_data(struct MyStack* st) {
 
    int count = compute_count(st);
    if (count == 0)
    {
        printf("empty!\n");
        return -1;
    }
 
    st->top = st->top - 1;
    return st->data[st->top];
}
 
void init_stack(struct MyStack* st) {
    int i = 0;
    for (i = 0; i < DEF_MAX; i++) {
        st->data[i] = 0;
    } 
    st->top = 0;
}
 
void push_data(struct MyStack* st, int data) {
    int top = st->top;
 
    if (top >= DEF_MAX) {
        printf("full!\n");
        return;
    }
 
    st->data[top] = data;
    st->top = st->top + 1;
}
 
int compute_count(struct MyStack* st) {
    return st->top;
}

원래는 비트연산을 통해서 저장되어 있는 10진수 값을 쉬프트해 나가며 2진 수 값을 출력하려고 했으나, 재진(김재진)이가 나머지 연산에 대한 힌트를 알려주었다.

최종적으로 나머지 연산과 스택을 이용해 2진수를 출력하도록 구현하였다.

나머지 연산이 깔끔한 것 같다.

algorithm/0dotg.txt · 마지막으로 수정됨: 2015/10/11 23:48 저자 lindol