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