Algorithm/Do it

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

Bonita SY 2019. 10. 9. 17:44
728x90
반응형

Q6. 실습 2-8의 card_convr 함수를 수정하여 배열의 맨 앞쪽에 아랫자리가 아니라 윗자리를 저장하는 card_conv 함수를 작성하세요.

int card_conv(unsigned x, int n, char d[]);


코드)

#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) {
      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 q6.c -o q6
sy@sy:~/algorithm/doit/chap02$ ./q6
10진수를 기수 변환합니다.
변환하는 음이 아닌 정수 : 59
어떤 진수로 변환할까요?(2-36) : 2
2진수로는111011입니다.
한 번 더 할까요?(1 --- 예 / 0 --- 아니오) : 0

배열 요소 모두 출력 참조)

https://dojang.io/mod/page/view.php?id=297

728x90
반응형