Page 72 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 72
09 if(x == 0) /* 0이면 */
10 d[digits++] = dchar[0]; /* 변환 후에도 0 */
11 else
12 while(x){
13 1 d[digits++] = dchar[x % n]; /* n으로 나눈 나머지를 저장 */
14 2 x /= n;
15 }
16 return digits;
17 }
18 (실습 2-8[B]에서 계속)
card_convr 함수는 정수 x를 n진수로 변환한 값의 각 자리의 문자를 char형 배열 d에 저장
하고 그 자릿수(배열에 저장한 문자수)를 반환하는 함수입니다. char형의 배열 dchar는
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"로 초기화되므로 각 문자는 아래
식으로 접근할 수 있습니다.
• 숫자 문자 •알파벳
dchar[0] … 문자 '0' dchar[10] … 문자 'A'
dchar[1] … 문자 '1' dchar[11] … 문자 'B'
… 중략 … … 중략 …
dchar[9] … 문자 '9' dchar[35] … 문자 'Z'
그림 2-12에서 구체적인 예를 들어 설명하겠습니다. x가 59이고 n이 16이면 x % n은 11입
니다. dchar[x % n]의 결과값은 문자 'B'입니다.
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 … 33 34 35 36
dchar 0 1 2 3 4 5 6 7 8 9 A B C D E F G … X Y Z\0
dchar[x % n] B
[그림 2-12] dchar[x % n]의 문자(x는 59, n은 16)
실습 2-8[A]의 0으로 초기화한 변수 digits는 변환한 다음 수의 자릿수를 나타내기 위한 변
수입니다. while문의 루프 본문은 아래의 작업을 수행합니다.
1 먼저 x를 n으로 나눈 나머지를 인덱스로 하는, 배열 dchar 안의 문자 dchar[x % n]을 배열 d의 요소
d[digits]에 대입하고 digits 값을 증가합니다.
2 x를 n으로 나눕니다.
x % n이 11이면 문자 'B‘를 d[digits]에 대입하고, 그 후 digits 값을 증가합니다(보충수업 2-7).
72 C 알고리즘