Algorithm/Do it

[자료구조와 함께 배우는 알고리즘 입문 - C언어 편] 2장 기본 자료구조 연습문제 Q7 답안 p.75

Bonita SY 2019. 10. 9. 22:35
728x90
반응형

Q7. 앞의 프로그램을 기초로 기수 변환 과정을 상세히 출력하는 프로그램을 작성하세요.

※ 그림 2-11, 그림 2-13에서는 나눗셈의 나머지를 몫의 오른쪽에 출력했지만 여기서는 나머지를 나누어지는 수의 오른쪽에 출력합니다.


코드)

#include <stdio.h>

#define swap(type, x, y) do{type t=x; x=y; y=t;} while(0)

int card_conv(unsigned x, int n, char d[]) {
  char dchar[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  int digits = 0;
  int j=0;

  if(x == 0) {
    d[digits++] = dchar[0];
  } else {
    while(x) {
      printf("%d|      %d --- %d\n", n, x, dchar[x % n]);
      puts("  +--------");
      d[digits++] = dchar[x % n];
      x /= n;
    }
  }

  for(j; j<digits/2; j++) {
    swap(int, d[j], d[digits-j-1]);
  }
  return digits;
}

int main(void) {
  int i;
  unsigned no;
  int cd;
  int dno;
  char cno[512];
  int retry;
  
    puts("10진수를 기수 변환합니다.");
  do {
    printf("변환하는 음이 아닌 정수 : ");
    scanf("%u", &no);
    do {
      printf("어떤 진수로 변환할까요?(2-36) : ");
      scanf("%d", &cd);
    } while(cd < 2 || cd > 36);
    dno = card_conv(no, cd, cno);
    printf("%d진수로는", cd);
    for(i=0; i<dno; i++) {
      printf("%c", cno[i]);
    }
    printf("입니다.\n");
    printf("한 번 더 할까요?(1 --- 예 / 0 --- 아니오) : ");
    scanf("%d", &retry);
  } while(retry == 1);

  return 0;
}

실행결과)

sy@sy:~/algorithm/doit/chap02$ gcc q7.c -o q7
sy@sy:~/algorithm/doit/chap02$ ./q7
10진수를 기수 변환합니다.
변환하는 음이 아닌 정수 : 58
어떤 진수로 변환할까요?(2-36) : 2
2|      58 --- 48
  +--------
2|      29 --- 49
  +--------
2|      14 --- 48
  +--------
2|      7 --- 49
  +--------
2|      3 --- 49
  +--------
2|      1 --- 49
  +--------
2진수로는111010입니다.
한 번 더 할까요?(1 --- 예 / 0 --- 아니오) : 0
728x90
반응형